К сожалению, вы отметили этот python-2.7, как питон 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. Открыть /dev/null
с помощью os.devnull
в 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
Связь посылает вход в стандартный ввод, если по конвейеру, и не читает стандартный вывод и стандартный поток ошибок, пока не будет достигнут конец из файла.
дубликат был неправильным, 'check_output' не разрешает переопределять' stdout'! –
Есть ли причина, по которой вам это нужно только для Python 2.7? –
, так что вы хотите поймать вывод в случае * ошибки * или * успеха * или обоих? –