外部プロセスをPythonで実行し、そのstderr
のみを処理します。subprocess.check_outputから標準出力のみを取得する
私はsubprocess.check_output
を使用できますが、標準出力を/dev/null
にリダイレクトする(または無視する)にはどうすればよいですか?stderr
のみを受信しますか?
外部プロセスをPythonで実行し、そのstderr
のみを処理します。subprocess.check_outputから標準出力のみを取得する
私はsubprocess.check_output
を使用できますが、標準出力を/dev/null
にリダイレクトする(または無視する)にはどうすればよいですか?stderr
のみを受信しますか?
残念ながらあなたはこのpython-2.7、Pythonの3.5のように、これまでrun()
を使用して簡単なことでしょうタグを付けています:単純にリダイレクトすることはできませんcheck_output()
標準出力で
import subprocess
output = subprocess.run(..., stdout=subprocess.DEVNULL,
stderr=subprocess.PIPE).stderr
を:
>>> 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
のpython 2.7でos.devnull
を使用して:
>>> 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
が通信パイプ場合は、標準入力に入力を送信し、ファイルの終わりに到達するまで、stdoutとstderrから読み込みます。
ありがとうございました。私はそれを行う簡単な方法を見つけました。 – DevShark
私は、単純なトリックが見つかりました:これは、標準出力をフィルタリング、および標準エラー出力のみを保持します
import subprocess
stderr_str = subprocess.check_output('command 2>&1 >/dev/null')
を。
重複が間違っていたので、 'check_output'は' stdout'を上書きすることができません! –
Python 2.7にのみ必要な理由はありますか? –
*エラー*または*成功*またはその両方の場合に出力をキャッチしたいですか? –