在python子呼叫抑制输出[复制](Suppressing output in python su

2019-06-23 19:32发布

这个问题已经在这里有一个答案:

  • 如何只需要调用一个命令,并没有得到它的输出[副本] 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 )),但它没有产生所需的结果。 我怎么会做这个吗?

Answer 1:

您可以使用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提到了一个评论,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)


Answer 2:

什么工作对我来说是追加2>/dev/null在命令结束。



文章来源: Suppressing output in python subprocess call [duplicate]