以下の MWE が出力を /dev/null にリダイレクトしないのはなぜですか。
#!/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
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)