You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:01