通常我可以通過更改sys.stdout
的值來更改Python中的stdout。但是,這似乎隻影響print
陳述。那麼,有什麼辦法可以抑制通過Python中的os.system()
命令運行的程序的輸出(到控制檯)嗎?從Python中的os.system()中的命令重定向stdio
回答
您可以考慮通過subprocess.Popen
與subprocess.PIPE
通信運行該程序,然後將該輸出推送到任何您想要的位置,但原樣,os.system
僅運行該命令,而沒有其他任何操作。
from subprocess import Popen, PIPE
p = Popen(['command', 'and', 'args'], stdout=PIPE, stderr=PIPE, stdin=PIPE)
output = p.stdout.read()
p.stdin.write(input)
在我看來更加靈活。你可能想看看完整的文檔:Python Subprocess module
重定向標準錯誤以及標準輸出。
對不執行從http://docs.python.org/library/os.html#process-management 使用os.system(命令)的工作報價 在子shell中執行命令(一個字符串)。這是通過調用標準C函數系統()來實現的,並且具有相同的限制。對sys.stdin等的更改不會反映在執行的命令的環境中。 – 2010-07-07 18:06:19
在unix系統上,可以將stderr和stdout作爲命令本身的一部分重定向到/ dev/null。
os.system(cmd + "> /dev/null 2>&1")
僅適用於unix系統 – 2010-07-07 18:11:18
是的,正確的。答覆已更新以避免混淆。 – ealdent 2014-07-08 14:42:21
如果您想完全消除使用python程序啓動的控制檯,可以使用.pyw擴展名保存它。
雖然我可能會誤解這個問題。
- 1. 重定向docker中的命令輸出
- 2. 命令重定向
- 3. Python 2.6.6 - 需要將OS.system命令的輸出添加到另一個OS.system命令中
- 4. 如何發送命令列表使用'os.system('命令')'到python中的CMD
- 5. Python的重定向從LSF命令輸出
- 6. 通過Python中的os.system在命令行上執行MySQL查詢
- 7. 如何在python的os.system中包裝shell命令?
- 8. 在命令行中重定向輸入
- 9. 不能在Django中運行os.system命令?
- 10. 如何在python中使用os.execvp()重定向命令輸出
- 11. 命令輸出重定向
- 12. IIS重定向 - 命令行
- 13. top命令重定向
- 14. 終端重定向命令
- 15. iphone重定向shell命令
- 16. Python中的重定向
- 17. 如何重定向'&'命令的日誌?
- 18. 的PowerShell 2.0命令行重定向
- 19. 使用python解析linux命令行/使用python重定向
- 20. 如何在使用stdio和stdout的vba中執行shell命令?
- 21. Python 3.4.3:os.system不運行我的ping「命令」
- 22. 哪個更好?使用內置的python函數或os.system命令?
- 23. 將輸出重定向到Windows中另一個命令的命令行參數
- 24. 定製命令行Python中
- 25. PowerShell中的命令重定向操作符
- 26. Python中的自定義JSON sort_keys命令
- 27. 重定向輸出和錯誤重定向命令後
- 28. 在Python中確定重定向的URL
- 29. 重定向輸入和輸出文件的stdio
- 30. 錯誤管道/從窗口中的文件或命令重定向
嗯...沒關係。因此,比命令在P = Popen(...)行上執行,是嗎?它只會在調用p.stdout.read()時顯示輸出... ...是的?謝謝 – 2010-07-07 18:46:14
好的...命令已經運行,但在一個單獨的線程中。無論如何,我可以在命令運行時饒恕程序,或者將它保存在同一個線程中?謝謝。 – 2010-07-07 18:54:59
只需使用p.wait()。但是,如果程序生成足夠的輸出,顯然這可能導致在使用PIPE stdout時發生死鎖。請參閱http://docs.python.org/library/subprocess.html#subprocess.Popen.wait上的完整文檔。但是,我認爲它應該工作.. – 2010-07-07 19:02:12