0

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

#!/usr/bin/env python
import os

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

1 回答 1

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)
于 2013-10-08T01:13:45.497 回答