这个问题已经在这里有一个答案:
- 如何只需要调用一个命令,并没有得到它的输出[副本] 4个回答
对于下面的命令:
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
)),但它没有产生所需的结果。 我怎么会做这个吗?
您可以使用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)
什么工作对我来说是追加2>/dev/null
在命令结束。