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=andstderr=参数来subprocess.call()指向stdoutstderr指向您选择的文件描述符。所以也许是这样的:

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)
于 2012-04-20T18:26:47.203 回答
6

对我有用2>/dev/null的是在命令末尾附加。

于 2012-04-20T18:25:31.093 回答