代码:
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。如果我改变了脚本的顺序,那么最后一个脚本将无法执行。
答案 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。