subprocess.Popen不执行shell脚本的所有行

时间:2012-01-26 23:28:14

标签: python shell subprocess

代码:

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

out,err = proc.communicate()

问题:

第1行中的shFile运行多个shell脚本。当我从bash执行shFile时,所有shell脚本都会被执行。但是当我使用subprocess.Popen执行它时,不会执行最后一个shell脚本。有趣的是,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。如果我改变了脚本的顺序,那么最后一个脚本将无法执行。

1 个答案:

答案 0 :(得分:2)

子进程没有任何魔力。请注意,sh在现代Linux系统上通常不是 bash,而是一个轻量级的shell,例如dash。如果您的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。