gpt4 book ai didi

python - 仅从 subprocess.check_output 获取 stderr 输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:56 28 4
gpt4 key购买 nike

我想在 python 中运行一个外部进程,并且只处理它的 stderr

我知道我可以使用 subprocess.check_output,但我怎样才能将标准输出重定向到 /dev/null(或以任何其他方式忽略它),并接收只有 stderr?

最佳答案

很遗憾,您已标记此 ,就像在 python 3.5 及更高版本中一样,使用 run() 会很简单:

import subprocess

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

使用 check_output() stdout 根本无法重定向:

>>> subprocess.check_output(('ls', 'asdfqwer'), stdout=open(os.devnull, 'wb'), stderr=subprocess.STDOUT)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 566, in check_output
raise ValueError('stdout argument not allowed, it will be overridden.')
ValueError: stdout argument not allowed, it will be overridden.

使用Popen对象和 communicate() python 版本低于 3.5。使用 os.devnull 打开 /dev/null在 python 2.7 中:

>>> 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 读取直到到达文件末尾。

关于python - 仅从 subprocess.check_output 获取 stderr 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39447238/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com