код:
proc=subprocess.Popen(['sh',shFile],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
out,err = proc.communicate()
Проблема:
shFile в строке 1 запускает несколько сценариев оболочки. Когда я выполняю shFile из bash, все сценарии оболочки выполняются. Однако, когда я выполняю его с помощью subprocess.Popen, последний скрипт оболочки не выполняется. Интересно, что последней строкой 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"
Выполняется только декодер__10_eval.sh. Если я изменил порядок скриптов, то последний из них не будет выполнен.
подпроцесс не делает никакой магии. Обратите внимание, что sh
часто не bash на современных Linux-системах, а легкая оболочка, такая как тире. Если ваш сценарий оболочки специфичен для bash, вам необходимо изменить 'sh'
на 'bash'
.
В любом случае это крайне маловероятно (менее вероятно, чем выигрыш в лотерее десять раз подряд), что sh
(или bash
) "забудет" выполнить строку в скрипте. Также убедитесь, что shFile
- это то, что вы ожидаете.
Посмотрев на ваш обновленный скрипт, ошибка почти наверняка будет в сценариях, которые вы оцениваете. Например, они могут просто закончиться временными файлами или другими непреднамеренно общими ресурсами. Пожалуйста, decoder__
скрипты 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.
cd /export/Experiments/hierMultiStream_audSpec_direct/decoder__10
sh decoder.sh eval > /export/Experiments /hierMultiStream_audSpec_direct/tempScripts/n_10.out
Сомнение, если это проблема скриптов декодера__, как я указал до этого при изменении порядка скриптов они работают нормально, за исключением текущего последнего скрипта.