如何使用subprocess运行指定文件并支持终端传入待启动脚本参数
解决方法
通过Python标准库sys.argv接收命令行传入的目标脚本名参数,动态匹配进程、拼接启动路径即可实现灵活切换要重启的示例脚本。
完整修改后代码
# test.py import psutil import time import sys import os import subprocess # 校验命令行参数 if len(sys.argv) < 2: print("请传入要重启的示例脚本名,例如:python test.py example1.py") sys.exit(1) target_script = sys.argv[1] script_path = os.path.join("/Desktop/Test/Script/new/examples", target_script) # 检测并杀死目标进程 process_found = False for process in psutil.process_iter(): try: cmdline = process.cmdline() if process.name().startswith('python') and len(cmdline) >=2 and target_script in cmdline[1]: print('Process found') process.kill() process_found = True break except (psutil.AccessDenied, psutil.NoSuchProcess): continue if process_found: time.sleep(3) # 启动新进程,不使用shell=True规避安全风险 subprocess.call(['python', script_path]) else: print('Process not found')
使用方法
- 要重启
example1.py时,终端执行命令:python test.py example1.py - 要重启其他脚本时,把命令末尾的脚本名替换为对应文件名即可,例如
python test.py example2.py
优化说明
- 增加了参数合法性校验,未传入脚本名时会主动提示,避免运行报错
- 优化了进程匹配逻辑,增加异常捕获,只会杀死对应目标脚本的Python进程,避免误杀其他程序、避免无权限访问进程信息时报错
- 取消了
shell=True配置,消除命令注入安全风险,通过路径拼接保证路径可靠性
内容的提问来源于stack exchange,提问作者Shiri
相关产品推荐
相关产品推荐

