Python如何将sys.argv参数传递给多个被调用的.py脚本
问题根因
你在通过subprocess.Popen启动子Python脚本时,仅传入了脚本路径作为启动参数,没有把提前拿到的日期参数追加到子进程的启动参数列表中,因此file1.py、out1.py等子脚本的sys.argv数组内自然不会包含该日期值。
解决方案
1. 修改auto.py代码
首先补全必要的依赖导入,然后调整子进程启动的参数列表,把日期参数传递给每个子脚本,修改后的完整代码如下:
import sys import subprocess date = str(sys.argv[1]) print(sys.argv[1]) # 读取待执行Python脚本 scripts_list = [r'C:\user\file1.py', r'C:\user\file2.py', r'C:\user\file3.py'] output_list = [r'C:\user\out1.py', r'C:\user\out2.py', r'C:\user\out3.py'] input_processes = [] output_processes = [] for script in scripts_list: # 把日期参数追加到启动参数列表中 p = subprocess.Popen(['python', script, date]) input_processes.append(p) for p in input_processes: p.wait() for script in output_list: # 若output类脚本也需要日期参数,同样追加,不需要可以去掉date参数 p = subprocess.Popen(['python', script, date]) output_processes.append(p) for p in output_processes: p.wait()
2. 子脚本侧接收参数
在每个需要用到日期的子脚本(file1.py/file2.py/out1.py等)中,通过如下逻辑即可拿到传入的日期参数:
import sys # 增加参数校验,避免漏传参数时报错 if len(sys.argv) < 2: print("未传入日期参数") exit(1) date = sys.argv[1] # 后续正常使用date变量即可
注意事项
- 若子脚本本身有其他自定义参数,将日期参数按顺序追加到启动参数列表最后即可,对应调整子脚本内
sys.argv的索引取值即可 - 采用列表形式传参给
subprocess.Popen会自动处理参数内的空格、特殊字符,无需额外转义 - 若不需要给output_list内的脚本传日期参数,删除对应Popen参数列表里的
date即可
内容的提问来源于stack exchange,提问作者John83
相关产品推荐
相关产品推荐

