2012-01-26 37 views
1

代碼:subprocess.Popen不執行shell腳本的所有行

proc=subprocess.Popen(['sh',shFile],stderr=subprocess.PIPE,stdout=subprocess.PIPE) 

out,err = proc.communicate() 

問題:

shFile在1個線運行幾個shell腳本。當我從bash執行shFile時,所有的shell腳本都會執行。但是,當我使用subprocess.Popen執行它時,最後的shell腳本不會被執行。有趣的是shFile的最後一行是「echo'Done'」,它被執行。

最後6行shFile是:

sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__20_eval.sh 
sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__5_eval.sh 
sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__20_eval.sh 
sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__15_eval.sh 
sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__10_eval.sh 
echo "Done" 

只有decoder__10_eval.sh不執行。如果我更改腳本的順序,最後一個腳本再次執行失敗。

+0

我能夠識別麻煩,在寫完最後一個decoder__腳本之後我沒有關閉文件。因此,子進程正在嘗試在完全寫入之前運行腳本。 – Vijay 2012-01-27 01:17:43

回答

2

子過程沒有任何魔力。請注意,sh通常是而不是在現代Linux系統上的bash,而是一個輕量級的shell,如破折號。如果您的shell腳本是特定於bash的,則需要將'sh'更改爲'bash'

在任何情況下,這是非常不可能sh(或bash)將「忘記」在腳本執行行(小於中彩票連續十次可能)。還要確保shFile是您所期望的。

看看您的更新腳本,錯誤幾乎肯定存在於您評估的腳本中。例如,他們可能會用完臨時文件或其他無意共享的資源。請張貼decoder__腳本,或用含shFile重現該問題:

/bin/echo sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__20_eval.sh 
/bin/echo sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__5_eval.sh 
/bin/echo sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__20_eval.sh 
/bin/echo sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__15_eval.sh 
/bin/echo sh /export/hierMultiStream_audSpec_direct/tempScripts/decoder__10_eval.sh 
echo "Done" 

如果「10」輸出丟失,那麼你真的得到了與SH問題。否則(並且具有極高的確定性),問題在於你正在執行的tempScripts。

+0

我試着減少了decode__腳本的數量,以檢查它是否是資源問題,但即使腳本數量減少,最後一個腳本仍然無法執行。 樣品decoder__腳本如下: '坎德拉/出口/實驗/ hierMultiStream_audSpec_direct/decoder__10' 'SH decoder.sh EVAL> /出口/實驗/ hierMultiStream_audSpec_direct/tempScripts/n_10.out' 的如果懷疑這是解碼器___腳本的一個問題,正如我之前在更改腳本順序時指出的那樣,它們運行良好,除了當前的最後腳本。 – Vijay 2012-01-27 00:22:01

+0

在命令開始處使用/ bin/echo運行時,它將打印所有decoder__腳本,包括最後一個腳本。 – Vijay 2012-01-27 00:24:26

+0

我嘗試用'bash'替換'sh',但它無濟於事。 – Vijay 2012-01-27 00:25:05