2010-07-07 88 views

回答

14

您可以考慮通過subprocess.Popensubprocess.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

+0

嗯...沒關係。因此,比命令在P = Popen(...)行上執行,是嗎?它只會在調用p.stdout.read()時顯示輸出... ...是的?謝謝 – 2010-07-07 18:46:14

+0

好的...命令已經運行,但在一個單獨的線程中。無論如何,我可以在命令運行時饒恕程序,或者將它保存在同一個線程中?謝謝。 – 2010-07-07 18:54:59

+2

只需使用p.wait()。但是,如果程序生成足夠的輸出,顯然這可能導致在使用PIPE stdout時發生死鎖。請參閱http://docs.python.org/library/subprocess.html#subprocess.Popen.wait上的完整文檔。但是,我認爲它應該工作.. – 2010-07-07 19:02:12

0

重定向標準錯誤以及標準輸出。

+1

對不執行從http://docs.python.org/library/os.html#process-management 使用os.system(命令)的工作報價 在子shell中執行命令(一個字符串)。這是通過調用標準C函數系統()來實現的,並且具有相同的限制。對sys.stdin等的更改不會反映在執行的命令的環境中。 – 2010-07-07 18:06:19

12

在unix系統上,可以將stderr和stdout作爲命令本身的一部分重定向到/ dev/null。

os.system(cmd + "> /dev/null 2>&1") 
+1

僅適用於unix系統 – 2010-07-07 18:11:18

+0

是的,正確的。答覆已更新以避免混淆。 – ealdent 2014-07-08 14:42:21

0

如果您想完全消除使用python程序啓動的控制檯,可以使用.pyw擴展名保存它。

雖然我可能會誤解這個問題。