如何在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
相关产品推荐
相关产品推荐

