使用os.system()抑制输出

时间:2013-10-08 01:10:10

标签: python shell redirect output

为什么下面的MWE没有将输出重定向到/ dev / null。

#!/usr/bin/env python
import os

if __name__ == "__main__":
   os.system ( 'echo hello &>/dev/null' )

1 个答案:

答案 0 :(得分:2)

不确定,但另一种(更好)的方法是:

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)