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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:57:02