爲什麼下面的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