45

次のコマンドの場合:

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ましたが、必要な結果が得られませんでした。ここでこれをどのように行いますか?

4

2 に答える 2

60

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がコメントで言及しているように、Pythonの新しい(3.x)バージョンには、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)
于 2012-04-20T18:26:47.203 に答える
6

私のために働いた2>/dev/nullのは、コマンドの最後に追加することです。

于 2012-04-20T18:25:31.093 に答える