在Python脚本中调用含C可执行参数的另一Python脚本的问题求助
问题排查与解决方案
现存错误点
- 参数传递错误:你写的
os.system("/home/Dev/program1.py DF_track")是硬编码字符串,既没有把track变量替换为对应数值,也没有匹配你生成的数据集文件名规则,实际传入program1的是固定字符串DF_track,而非你生成的DF_0/DF_1等目标数据集名,导致C可执行文件接收到非法参数,触发语法报错。 - Python脚本调用方式错误:如果你没有给program1.py添加可执行权限、也没有在文件头加
#!/usr/bin/env python3的shebang声明,直接调用/home/Dev/program1.py会触发权限校验失败,匹配你收到的安全策略报错。 - 进程管理错误:注释中的
subprocess.Popen是异步执行逻辑,不等待脚本运行完成就会进入下一轮循环,10次循环会同时启动10个进程读写文件,是你终端光标冻结的直接原因。
修复方案
1. 替换program2.py的调用逻辑
优先使用subprocess.run的列表传参模式,避免shell解析错误,同时显式等待每轮执行完成:
import os import subprocess # Some code for track in range(0, 10): with open(f'Train_{track}', 'r') as firstfile, open(f'DF_{track}.data', 'w') as secondfile: for line in firstfile: secondfile.write(line) # 动态生成正确的数据集名,匹配program1的参数要求 dataset_name = f'DF_{track}' # 显式用python3调用脚本,列表传参无shell注入风险,check=True自动捕获执行错误 subprocess.run( ["python3", "/home/Dev/program1.py", dataset_name], check=True, shell=False )
2. (可选)修复os.system写法
如果你要保留os.system的调用方式,需要补充f-string做变量替换,且显式调用python3:
os.system(f"python3 /home/Dev/program1.py {dataset_name}")
3. 权限校验
如果仍有安全策略相关报错,执行以下命令给可执行文件添加运行权限:
chmod +x /home/Dev/c4.5 /home/Dev/c4.5rules # 若需要直接执行program1.py可额外执行: chmod +x /home/Dev/program1.py
额外优化建议
- program1.py中打开
Temp文件后建议使用with open('Temp') as f:语法,避免文件句柄泄漏 - 不要在循环中使用
subprocess.Popen除非额外添加.wait()调用,避免多进程同时读写导致的文件冲突
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

