对于以下命令:
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
)),但它没有产生所需的结果。我怎么会在这里这样做?
答案 0 :(得分:46)
您可以使用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)
答案 1 :(得分:4)
对我有用的是在命令末尾附加2>/dev/null
。