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

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 に答える