2012-01-26 19 views
1

コードのすべての行は実行されません:subprocess.Popenは、シェルスクリプト

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

out,err = proc.communicate() 

問題:ライン1に

shFileには、いくつかのシェルスクリプトを実行します。 bashからshFileを実行すると、すべてのシェルスクリプトが実行されます。しかし、私がsubprocess.Popenを使って実行すると、最後のシェルスクリプトは実行されません。興味深いことに、shFileの最後の行は "echo 'Done'"で実行されます。 shFileの

最後の6行は、次のとおりです。

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

答えて

2

サブプロセスは魔法を何もしません。最新のLinuxシステムでは、shでなく、 bashですが、ダッシュなどの軽量シェルであることに注意してください。シェルスクリプトがbash固有である場合は、'sh''bash'に変更する必要があります。いずれの場合においても

、それはsh(またはbash)はスクリプト内の行を実行するために「忘れる」ということ(行で宝くじを10回受賞よりも可能性が低い)そう極めてです。また、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の問題を本当に持っています。それ以外の場合(また、確実性も非常に高い)、実行しているtempScriptに問題があります。

+0

リソースに問題があるかどうかをチェックするためにdecoder__スクリプトの数を減らそうとしましたが、スクリプトの数が少なくても最後のスクリプトは常に実行に失敗します。 サンプルdecoder__スクリプトは次のとおりです。 'CD /エクスポート/実験/ hierMultiStream_audSpec_direct/decoder__10' ' SH decoder.shのeval> /エクスポート/実験/ hierMultiStream_audSpec_direct/tempScripts/n_10.out' 疑いであればそれは私が前回のスクリプトを除いてうまく動作するスクリプトの順序を変更する際に先に指摘したように、decoder__スクリプトの問題です。 – Vijay

+0

コマンドの先頭に/ bin/echoを付けて実行すると、最後のものも含めてすべてのdecoder__スクリプトが出力されます。 – Vijay

+0

私は 'sh'を' bash'で置き換えようとしましたが、役に立たなかった。 – Vijay

関連する問題