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

如何在Python中调用带命令行参数的C可执行文件并重定向输出

问题原因

  • 你使用的>是shell提供的重定向操作符,默认subprocess.run不启用shell时不会解析该符号,无法自动完成输出重定向。
  • 你原有运行逻辑中,outputFileName并不是传给C程序的参数,C程序仅接收inputFileName1个入参,输出内容会直接打印到标准输出(stdout),你之前的代码将outputFileName作为第二个入参传给C程序属于错误传参。

解决方案

方案1(推荐,更安全)

直接使用subprocess.run内置的stdout参数指定输出文件,无需启用shell,不存在命令注入风险:

import subprocess
import sys

inputFileName = sys.argv[1]
outputFileName = sys.argv[2]

with open(outputFileName, 'w') as f:
    # 仅传入inputFileName作为C程序的参数,将程序标准输出写入指定文件
    subprocess.run(
        ['/home/dev/Desktop/myfile', inputFileName],
        stdout=f,
        # 如果需要把错误输出也重定向到同一个文件,可以取消下一行注释
        # stderr=subprocess.STDOUT
    )

方案2(启用shell模式,写法简单但存在注入风险)

如果参数完全可控,可以启用shell解析能力,直接执行带重定向的完整命令:

import subprocess
import sys

inputFileName = sys.argv[1]
outputFileName = sys.argv[2]

subprocess.run(
    f'/home/dev/Desktop/myfile {inputFileName} > {outputFileName}',
    shell=True
)

注:该方案如果传入的文件名包含空格、特殊符号或者是不可信的用户输入,可能存在命令注入漏洞,不推荐生产环境使用。

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:03