我有一個使用os.system運行shell命令的Python腳本。這些命令的輸出回顯到屏幕上;我喜歡這個,需要保持它。我還希望我的腳本能夠根據系統調用的輸出內容採取行動。我怎樣才能做到這一點?將os.system的輸出打印到屏幕上並根據它執行操作
在我的具體情況下,我打電話給os.system("svn update")
。我需要輸出到屏幕上(例如,如果發生衝突),用戶需要能夠與svn進行交互。我希望能夠讓腳本根據輸出採取行動 - 例如,如果它看到構建腳本已更新,則觸發構建。
我不希望自己處理I/O(這看起來不必要地複雜),我寧願不將輸出發送到臨時文件,我必須稍後清理(儘管如果必須)。
編輯:
這裏是我的測試腳本:
#!/usr/bin/python -t
import subprocess
output = subprocess.check_output(["echo","one"])
print "python:", output
output = subprocess.check_output(["echo", "two"], shell=True)
print "python:", output
output = subprocess.check_output("echo three", shell=True)
print "python:", output
,這裏是它的輸出:
$ ./pytest
python: one
python:
python: three
(有在該代碼塊沒有結束一個額外的空白行)我期待的更像是:
$ ./pytest
one
python: one
two
python:
three
python: three
你不能用'os.system'。你需要使用'subprocess' ...然後這些事情會變得棘手。在'svn update'運行之後等待採取行動是否正確,或者實際上是否需要在運行時與進程交互? – mgilson
@mgilson用戶需要與流程進行交互(以決定如何解決衝突)。腳本不需要與進程交互 - 它只需要grep輸出特定的字符串或正則表達式。 – CajunLuke
這是否需要成爲一個跨平臺的解決方案,還是隻能使用純Linux解決方案? –