Pythonsubprocess.check_输出(args)失败,而通过Windows命令行执行的args正常工作

2024-04-29 13:08:18 发布

您现在位置:Python中文网/ 问答频道 /正文

pythonsubprocess.check_output的一些问题。在

output = subprocess.check_output(args)

其中myargs是:

^{pr2}$

当从标准的windows命令行执行时,它可以工作,但在通过Python subprocess.check_output执行时就不起作用了。在win cmd的情况下,会产生输出文件,并且日志.txt同样,python脚本生成的文件大小为0,而不是日志.txt完全。在


Tags: 文件命令行txtcmdoutput标准windowscheck
3条回答

使用参数列表并将输出重定向到文件:

import subprocess

args = ['C:/DO/bin/Config.exe', ' ChCfg7', ' LFE', '-b1152000', 'C:/DO/PCM/1.wav', 'C:/DO/PCM/2.wav', 'C:/DO/PCM/3.wav', 'C:/DO/PCM/4.wav', 'C:/DO/PCM/5.wav', 'C:/DO/PCM/6.wav', ' ModeBCast', '-oC:/DO/OUT/outfile']

with open("C:/DO/OUT/log.txt", "w") as f:
    subprocess.check_call(args, stdout=f)

您可以使用shell=True,但对于security reasons来说,这不是一个好主意,使用上面的代码,只需将输出重定向到文件,就可以很容易地实现这一点。在

>是shell重定向运算符。在shell中运行该命令,或者(更好)作为@Padraic Cunningham suggested在Python中模拟它:

#!/usr/bin/env python
import subprocess

args = r"C:\DO\bin\Config.exe  ChCfg7  LFE -b1152000".split()
args += [r'C:\DO\PCM\%d.wav' % i for i in range(1, 7)]
args += [" ModeBCast", r"-oC:\DO\OUT\outfile"]    
with open(r"C:\DO\OUT\log.txt", "wb", 0) as output_file:
    subprocess.check_call(args, stdout=output_file)

该代码对Windows路径使用原始字符串文本,以避免转义反斜杠。在

在Windows上使用shell=True通常没有意义,除非您想运行一个内置命令,如dir。如果args不是使用来自外部源的输入构造的,那么security considerationsdonot应用。shell=True启动附加进程(%COMSPEC%),它改变how the executable is searched,并且改变{a4}-除非必要,否则不要使用shell=True。在

output = subprocess.check_output(args,shell=True)

使用shell=True运行此程序

相关问题 更多 >