我試圖在我的python腳本中使用subprocess.Popen()順序執行幾個linux命令。但是,這似乎是我寫腳本的方式,python正在執行某種類型的執行並忘記,並且在開始步驟2之前不等待第1步完成。如何在python腳本中執行多個命令的命令
例如,我試圖:
- 執行SQL命令,將結果寫入遠程服務器的 /tmp中的文件。
- 當我完成使用該文件後,我想刪除遠程文件,所以我們沒有用完空間。
發生了什麼是python似乎運行第1步的cmd,並沒有等待第1步完成,它運行第2步。因此,該文件仍然掛起,因爲在創建文件之前運行刪除。
這是我的代碼片段。希望有人能告訴我如何做到這一點,所以第2步只在第1步完成後運行。我試圖匿名/簡化代碼片段,以便在匿名代碼時避免任何錯誤。
sqlCmd = "ssh " + HOST + "mysql -h host -ppwd -q select blah from table where foo = 'bar' INTO OUTFILE '/tmp/blah_bydate.csv"
rmCmd = "ssh " + HOST + " rm -f /tmp/blah_bydate.csv"
proc = subprocess.Popen(sqlCmd, shell=True, stdout=subprocess.PIPE)
proc = subprocess.Popen(rmCmd, shell=True, stdout=subprocess.PIPE)
我發現一些上那麼,建議的解決辦法是做類似
subprocess.Popen([cmd1; cmd2; cmd3], shell=True, stdout=subprocess.PIPE)
,我不想做,因爲我的命令,參數化和可長/複雜。
考慮運行單個'ssh'會話... – 2015-03-18 22:50:09
詳細說明@Karoly:在* nix中,如果有''ls; cp a.txt b.txt''''cp'將不會被執行,直到'ls'命令完成。而且,如果你使用''ls && cp a.txt b.txt'','cp'將不會被執行,除非'ls'成功完成。因此,建立一個統一的_Cmd_字符串,將你的'mysql'和'rm'命令與';'或'&&'連接起來。 – boardrider 2015-03-19 10:47:16