为什么下面的MWE不会将输出重定向到/ dev/null。使用os.system保存输出()
#!/usr/bin/env python
import os
if __name__ == "__main__":
os.system ('echo hello &>/dev/null')
为什么下面的MWE不会将输出重定向到/ dev/null。使用os.system保存输出()
#!/usr/bin/env python
import os
if __name__ == "__main__":
os.system ('echo hello &>/dev/null')
不知道,但另一个(更好)的方式来做到这一点是:
from os import devnull
from subprocess import call
if __name__ == "__main__":
with open(devnull, 'w') as dn:
call(['echo', 'hello'], stdout=dn, stderr=dn)
这将打开/dev/null
写作,并重定向衍生的过程中存在的输出。
更新基于意见从@abarnert
在echo
特定情况下,要获得相同的,你会想用shell=True
相同的行为,否则它会调用/bin/echo
,而不是shell内建:
call('echo hello', shell=True, stdout=dn, stderr=dn)
此外,关于Python 3.3+,你可以做
from subprocess import call, DEVNULL
if __name__ == "__main__":
call('echo hello', shell=True, stdout=DEVNULL, stderr=DEVNULL)
唯一的问题是,它运行'/ bin/echo'而不是shell内置'echo'。所以你可能需要'call('echo hello',shell = True,stdout = dn,stderr = dn)''。 – abarnert
另外,在3.3+版本中,您可以使用'stdout = DEVNULL'而不是必须手动打开它,这很漂亮。 – abarnert
@abarnert对于'shell = True',为什么在'''echo','hello']'上使用'echo hello''? – SethMMorton
你是什么意思?对我来说,它不打印输出,所以它被重定向。 – Amadan
我不确定MWE是什么,我不知道在什么平台上不会重定向到/ dev/null(它适用于OS X 10.8和一些古老的linux发行版),但是...为什么你首先使用'os.system'?如果你想控制发生的事情,就使用'subprocess',就像'os.system'文档所说的那样。 – abarnert
我的猜测是MWE是“最低工作示例” – SethMMorton