仅从获取stderr输出子流程检查输出

2024-04-19 01:38:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python运行一个外部进程,只处理它的stderr。在

我知道我可以使用subprocess.check_output,但是如何将stdout重定向到/dev/null(或者以任何其他方式忽略它),并且只接收stderr?在


Tags: devoutput进程checkstderrstdout方式null
2条回答

不幸的是,您已经标记了这个,就像在python3.5及更高版本中一样,使用^{}这很简单:

import subprocess

output = subprocess.run(..., stdout=subprocess.DEVNULL,
                        stderr=subprocess.PIPE).stderr

对于check_output(),标准输出无法重定向:

^{pr2}$

在python版本低于3.5的情况下使用^{}对象和^{}。在Python2.7中使用^{}打开/dev/null

>>> import subprocess
>>> import os
>>> with open(os.devnull, 'wb') as devnull:
...     proc = subprocess.Popen(('ls', 'asdfqwer'),
...                             stdout=devnull,
...                             stderr=subprocess.PIPE)
...     proc.communicate()
...     proc.returncode
... 
(None, "ls: cannot access 'asdfqwer': No such file or directory\n")
2

Communicate将输入发送到stdin(如果通过管道传输),并从stdout和stderr读取数据,直到到达文件末尾。在

我发现了一个简单的诀窍:

import subprocess
stderr_str = subprocess.check_output('command 2>&1 >/dev/null')

这将过滤掉stdout,并只保留stderr。在

相关问题 更多 >