是否有一个安静的subprocess.call版本?

fer*_*son 52 python subprocess silent

是否有一个变体subprocess.call可以运行命令而不打印到标准输出,或阻止它的标准输出消息?

Mat*_*ner 63

是.将其重定向stdout/dev/null.

process = subprocess.call(["my", "command"], stdout=open(os.devnull, 'wb'))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,从Python ver.3.3实际上有一个`subprocess.DEVNULL`,可以用来代替`open(os.devnull,'wb')`. (10认同)

wim*_*wim 30

通常这种聊天是在stderr,所以你也可能想要沉默.这是我的例子:

import subprocess
rc = subprocess.call(args, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)
Run Code Online (Sandbox Code Playgroud)

注意: subprocess.call自Python 3.3起可用.如果您还在使用Python 2:

import os, subprocess

with open(os.devnull, 'wb') as shutup:
    rc = subprocess.call(args, stdout=shutup, stderr=shutup)
Run Code Online (Sandbox Code Playgroud)


BOY*_*YPT 9

subprocess.call 也接受stdin/stdout/stderr重定向:

process = subprocess.call(["my", "command"], stdout=open(os.devnull, 'wb'))
Run Code Online (Sandbox Code Playgroud)

  • open()不返回PIPE,PIPE意味着`subprocess.PIPE`,可以从程序的另一端读取.打开`os.devnull`不会导致问题,因为这个黑洞文件没有底部,缓冲区永远不会被填满. (7认同)
  • [文档](http://docs.python.org/2/library/subprocess.html#subprocess.call)具体说"不要使用stdout = PIPE或stderr = PIPE使用此功能". (2认同)