Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅从子流程获取stderr输出。检查\u输出_Python_Python 2.7_Subprocess_Stderr - Fatal编程技术网

Python 仅从子流程获取stderr输出。检查\u输出

Python 仅从子流程获取stderr输出。检查\u输出,python,python-2.7,subprocess,stderr,Python,Python 2.7,Subprocess,Stderr,我想用python运行一个外部进程,只处理它的stderr 我知道我可以使用子流程。检查输出,但是我如何将stdout重定向到/dev/null(或者以任何其他方式忽略它),并且只接收stderr?不幸的是,您已经标记了它,就像在python 3.5及更高版本中一样,使用以下方法很简单: 使用check\u output()stdout根本无法重定向: >>> subprocess.check_output(('ls', 'asdfqwer'), stdout=open(os.

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


我知道我可以使用
子流程。检查输出,但是我如何将stdout重定向到
/dev/null
(或者以任何其他方式忽略它),并且只接收
stderr

不幸的是,您已经标记了它,就像在python 3.5及更高版本中一样,使用以下方法很简单:

使用
check\u 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.

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

我发现了一个简单的技巧:

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

这将过滤掉标准输出,只保留标准输出。

副本错误,
check\u输出
不允许覆盖
标准输出
!是否有理由只在Python2.7中使用它?那么,是否希望在出现错误或成功或两者同时出现的情况下捕获输出?@JRichardSnape:我在Python2.7中需要它,只是因为我的代码库是在Python2.7上的。@AnttiHaapala在出现错误和成功的情况下,我只想捕获标准库,以获得您的帮助。我找到了一个简单的方法。
>>> 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
import subprocess
stderr_str = subprocess.check_output('command 2>&1 >/dev/null')