python3非零退出代码_关于subprocess:Python:从命令行获取输出,该命令行以非零退出代码退出...

我正在Windows Server 2008 R2 x64设备上使用Python 2.7.1。

我正在尝试获取一个命令行进程的输出,它在输出我需要的信息后给出一个非零的退出状态。

我最初使用的是subprocess.check_output,并捕获了以非零退出状态出现的被调用进程错误,但是当返回代码存储在错误中时,没有输出显示出这一点。

在给出输出但退出状态为0的情况下运行此命令可以正常工作,我可以使用subprocess.check_output获取输出。

我的假设是输出被写入stdout,但异常从stderr中提取其"输出"。我已经尝试重新实现check_输出的功能,但是当我认为应该看到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

这在变量输出中给出了以下内容:[('', None)]。

我的subprocess.Popen代码正确吗?

在.communicate()之后,可以直接使用process.returncode而不是process.poll()。

如何使用python从命令行获得输出:stackoverflow.com/a/20456745/445131

你的代码工作正常。结果表明,您调用的进程可能输出到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

产量

subprocess ->

native -> ('', None)

stderr subproces CalledProcessError.output = stdout

native CalledProcessError.output = stderr stdout

遗憾的是,我不知道如何解决这个问题。注意,subprocess.check_output结果只包含来自stdout的输出。您的检查输出替换将同时输出stderr和stdout。

在检查了subprocess.check_output之后,它确实生成了一个被调用的进程错误,其输出只包含stdout。

我很确定这就是它要去的地方。我能够与供应商取得联系,并发现abotu一些额外的未记录参数,这些参数会阻止非零退出状态的发生,所以我的脚本现在正在工作,尽管我仍然想知道如何从con捕获输出。

您是否如python doc页面中所述尝试过stderr=subprocess.STDOUT:

To also capture standard error in the result, use

stderr=subprocess.STDOUT:

以下是测试代码:

import subprocess

try:

subprocess.check_output('>&2 echo"errrrr"; exit 1', shell=True)

except subprocess.CalledProcessError as e:

print 'e.output: ', e.output

try:

subprocess.check_output('>&2 echo"errrrr"; exit 1', shell=True, stderr=subprocess.STDOUT)

except subprocess.CalledProcessError as e:

print 'e.output: ', e.output

输出:

errrrr

e.output:

e.output:  errrrr

这里有个问题可能会打中你-http://bugs.python.org/issue9905

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值