【发布时间】:2011-06-28 13:52:32
【问题描述】:
我在 Windows Server 2008 R2 x64 机器上使用 Python 2.7.1。
我正在尝试获取命令行进程的输出,该进程在输出我需要的信息后给出非零退出状态。
我最初使用subprocess.check_output,并捕获了以非零退出状态发生的 CalledProcessError,但是当返回码存储在错误中时,没有输出显示这一点。
针对给出输出但退出状态为 0 的情况运行此程序可以正常工作,我可以使用 subprocess.check_output 获取输出。
我的假设是输出被写入 STDOUT,但异常从 STDERR 中提取其“输出”。我试图重新实现 check_output 的功能,但是当我相信我应该看到 STDOUT 和 STDERR 的输出时,我仍然没有得到任何输出。我当前的代码如下(其中“命令”是我正在运行的命令的全文,包括参数:
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
标签: python subprocess stdout windows-server-2008-r2 stderr