2024-04-29 13:08:18 发布
网友
pythonsubprocess.check_output的一些问题。在
output = subprocess.check_output(args)
其中myargs是:
args
当从标准的windows命令行执行时,它可以工作,但在通过Python subprocess.check_output执行时就不起作用了。在win cmd的情况下,会产生输出文件,并且日志.txt同样,python脚本生成的文件大小为0,而不是日志.txt完全。在
subprocess.check_output
使用参数列表并将输出重定向到文件:
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=True
>是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。在
dir
%COMSPEC%
output = subprocess.check_output(args,shell=True)
使用shell=True运行此程序
使用参数列表并将输出重定向到文件:
您可以使用
shell=True
,但对于security reasons来说,这不是一个好主意,使用上面的代码,只需将输出重定向到文件,就可以很容易地实现这一点。在>
是shell重定向运算符。在shell中运行该命令,或者(更好)作为@Padraic Cunningham suggested在Python中模拟它:该代码对Windows路径使用原始字符串文本,以避免转义反斜杠。在
在Windows上使用
shell=True
通常没有意义,除非您想运行一个内置命令,如dir
。如果args
不是使用来自外部源的输入构造的,那么security considerationsdonot应用。shell=True
启动附加进程(%COMSPEC%
),它改变how the executable is searched,并且改变{a4}-除非必要,否则不要使用shell=True
。在使用
shell=True
运行此程序相关问题 更多 >
编程相关推荐