Dav*_*542 36 python subprocess stdout
对于以下命令:
subprocess.call(shlex.split(
"""/usr/local/itms/bin/iTMSTransporter -m lookupMetadata
-apple_id %s -destination %s"""%(self.apple_id, self.destination))
Run Code Online (Sandbox Code Playgroud)
它将整个输出打印到终端窗口.我如何在这里抑制所有输出?我尝试过subprocess.call(shlex.split(<command> > /dev/null 2&1)),但它没有产生所需的结果.我怎么会这样做?
lar*_*sks 49
您可以使用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)
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)