在python子进程调用中抑制输出

时间:2012-04-20 18:17:21

标签: python subprocess stdout

对于以下命令:

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)),但它没有产生所需的结果。我怎么会在这里这样做?

2 个答案:

答案 0 :(得分:46)

您可以使用stdout=stderr=参数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)

答案 1 :(得分:4)

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