如何在Python程序中调用C可执行文件并将运行结果输出至指定文件
问题原因
> 是Shell提供的重定向语法,你当前使用列表参数调用subprocess.run的方式默认不启用Shell解析,所以你传入的第三个参数outputfile会被直接当成命令行参数传递给C可执行文件,而非触发重定向逻辑,自然不会生成对应的输出文件,程序的运行结果会直接打印在终端标准输出中。
解决方案
方案1(推荐,无安全风险)
使用subprocess.run内置的stdout参数直接指定输出文件,不需要依赖Shell的重定向功能,写法如下:
import subprocess import sys filestem = sys.argv[1] # 打开输出文件,将子进程的标准输出直接写入该文件 with open('outputfile', 'w', encoding='utf-8') as f: subprocess.run(['/home/dev/executable_file', filestem], stdout=f)
如果你的C程序输出是二进制内容,把open的模式改成wb,去掉encoding参数即可。
方案2(不推荐,存在Shell注入风险)
主动开启Shell解析支持,直接把完整的带重定向的命令作为字符串传入:
import subprocess import sys filestem = sys.argv[1] subprocess.run(f'/home/dev/executable_file {filestem} > outputfile', shell=True)
仅当你完全确定filestem参数的来源安全、不存在恶意拼接的场景下再使用该方案,否则可能被传入特殊字符执行任意命令。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

