bpl*_*urg 6 python subprocess stdout stderr windows-server-2008-r2
我Python 2.7.1
在Windows Server 2008 R2 x64框上使用.
我正在尝试获取命令行进程的输出,该进程在输出我需要的信息后给出非零退出状态.
我最初使用subprocess.check_output
,并捕获以非零退出状态发生的CalledProcessError,但是当返回码存储在错误中时,没有输出显示此信息.
对于提供输出但退出状态为0的情况运行此命令正常工作,我可以使用subprocess.check_output获取输出.
我的假设是输出被写入STDOUT,但异常从STDERR中拉出"输出".我试图重新实现check_output的功能,但是当我相信我应该看到输出到STDOUT和STDERR时,我仍然没有得到输出.我当前的代码如下(其中'command'是我正在运行的命令的全文,包括参数:
process = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, universal_newlines=True)
output = process.communicate()
retcode = process.poll()
if retcode:
raise subprocess.CalledProcessError(retcode, image_check, output=output)
return output
Run Code Online (Sandbox Code Playgroud)
这给了我变量输出中的以下内容: [('', None)]
我的subprocess.Popen
代码是否正确?
Rod*_*Rod 10
您的代码工作正常.事实证明,您正在调用的进程可能会输出到CON.请参阅以下示例
import subprocess
def check_output(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
output = process.communicate()
retcode = process.poll()
if retcode:
raise subprocess.CalledProcessError(retcode, command, output=output[0])
return output
command = "echo this>CON"
print "subprocess -> " + subprocess.check_output(command, shell=True)
print "native -> " + str(check_output(command))
try:
subprocess.check_output("python output.py", shell=True)
except subprocess.CalledProcessError, e:
print "subproces CalledProcessError.output = " + e.output
try:
check_output("python output.py")
except subprocess.CalledProcessError, e:
print "native CalledProcessError.output = " + e.output
Run Code Online (Sandbox Code Playgroud)
产量
subprocess ->
native -> ('', None)
stderr subproces CalledProcessError.output = stdout
native CalledProcessError.output = stderr stdout
Run Code Online (Sandbox Code Playgroud)
可悲的是,我不知道如何解决这个问题.请注意,subprocess.check_output
结果仅包含stdout的输出.check_output替换将输出stderr和stdout.
在检查之后subprocess.check_output
,它确实生成了一个CalledProcessError,其输出只包含stdout.
归档时间: |
|
查看次数: |
21541 次 |
最近记录: |