2012-04-20 153 views
25

对于以下命令抑制输出:在python子呼叫

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

回答

35

您可以使用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,如果你不从管道读取,可能会导致你的程序块,如果它产生大量的输出。

+27

你可以使用os.devnull – 2012-04-20 18:31:57

+3

嘿,看我学到了一些东西。 – larsks 2012-04-20 18:49:34

+1

你究竟如何使用os.devnull来改善这个答案?对我来说,这只是'/ dev/null'这个字符串,并不是完全可以保证10个upvotes的改进类型。 – RussellStewart 2014-04-21 20:07:20

2

对我来说有效的是在命令结尾附加2>/dev/null

+0

对于未来的读者:这种方法不能保证能够在所有平台/ shell上工作,即使它可能适用于任何最近的和POSIX-y。 – 2017-06-15 19:37:44

+0

(此外,这只适用于'shell = True',你可能要尽量避免) – larsks 2018-01-28 15:45:16