从Python中的os.system()命令重定向stdio

Lei*_*sen 7 python os.system stdout stdio

通常我可以通过更改值来改变Python中的stdout sys.stdout.但是,这似乎只会影响print陈述.那么,有什么方法可以抑制通过os.system()Python中的命令运行的程序的输出(到控制台)?

Blu*_*ers 17

您可以考虑通过通信运行程序subprocess.Popen,subprocess.PIPE然后将输出推送到任何您想要的地方,但就像os.system只运行命令一样,没有别的.

from subprocess import Popen, PIPE

p = Popen(['command', 'and', 'args'], stdout=PIPE, stderr=PIPE, stdin=PIPE)

output = p.stdout.read()
p.stdin.write(input)
Run Code Online (Sandbox Code Playgroud)

我认为更加灵活.您可能需要查看完整的文档:Python Subprocess模块

  • 简单地说,使用p.wait().但是,如果程序生成足够的输出,显然这会在使用PIPE标准输出时导致死锁.请参阅http://docs.python.org/library/subprocess.html#subprocess.Popen.wait上的完整文档.但是,我认为它应该工作.. (2认同)

eal*_*ent 16

在unix系统上,您可以将stderr和stdout重定向到/ dev/null作为命令本身的一部分.

os.system(cmd + "> /dev/null 2>&1")
Run Code Online (Sandbox Code Playgroud)