python subprocess.check_output的一些问题。
output = subprocess.check_output(args)
我的args
是:
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 > C:\\DO\\OUT\\log.txt
这在从标准Windows命令行执行时有效,但在通过Python subprocess.check_output
执行时不起作用。在win cmd的情况下,还有输出文件和log.txt,python脚本生成大小为0的文件,根本没有log.txt。
答案 0 :(得分:2)
使用args列表并将输出重定向到文件:
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通常不是一个好主意,使用上面的代码可以很容易地实现相同的功能,只需将输出重定向到文件即可。
答案 1 :(得分:1)
output = subprocess.check_output(args,shell=True)
使用shell=True
答案 2 :(得分:0)
>
是一个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路径的原始字符串文字来避免转义反斜杠。
除非您想运行内置命令(例如shell=True
),否则在Windows上使用dir
通常没有意义。如果args
未使用来自外部来源的输入构建,则security considerations执行而不是。 shell=True
启动了其他流程(%COMSPEC%
),它会更改how the executable is searched并更改what characters should be escaped (what characters are metacharacters) - 除非必要,否则请勿使用shell=True
。