次のコマンドの場合:
subprocess.call(shlex.split(
"""/usr/local/itms/bin/iTMSTransporter -m lookupMetadata
-Apple_id %s -destination %s"""%(self.Apple_id, self.destination))
出力全体をターミナルウィンドウに出力します。ここですべての出力を抑制するにはどうすればよいですか?やってみましたsubprocess.call(shlex.split(<command> > /dev/null 2&1
))、しかしそれは必要な結果を生み出しませんでした。ここでどうすればいいですか?
_stdout=
_および_stderr=
_パラメータをsubprocess.call()
に使用して、stdout
またはstderr
を選択したファイル記述子に指定できます。だからおそらくこのようなもの:
_import os
devnull = open(os.devnull, 'w')
subprocess.call(shlex.split(
'/usr/local/itms/bin/iTMSTransporter -m lookupMetadata '
'-Apple_id %s -destination %s' % (self,Apple_id, self.destination)),
stdout=devnull, stderr=devnull)
_
パイプから読み取っていない場合に_subprocess.PIPE
_を使用すると、大量の出力が生成される場合にプログラムがブロックされる可能性があります。
更新
@yanlendがコメントで言及しているように、新しい(3.x)バージョンのPythonは_subprocess.DEVNULL
_を含めて、より便利で移植可能な方法でこの問題を解決します。その場合、コード次のようになります:
_subprocess.call(shlex.split(
'/usr/local/itms/bin/iTMSTransporter -m lookupMetadata '
'-Apple_id %s -destination %s' % (self,Apple_id, self.destination)),
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
_
私にとってうまくいったのは、コマンドの最後に2>/dev/null
を追加することです。