2012-01-26 3 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 개 라인

은 다음과 같습니다 만 decoder__10_eval.sh가 실행되지 않습니다

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" 

. 스크립트 순서를 변경하면 마지막 스크립트가 실행되지 않습니다.

+0

문제를 식별 할 수 있었고 마지막 decoder__ 스크립트를 작성한 후 파일을 닫지 못했습니다. 따라서 subprocess는 스크립트가 완전히 작성되기 전에 실행하려고했습니다. – Vijay

답변

2

하위 프로세스는 어떤 마법도 수행하지 않습니다. sh은 최신 리눅스 시스템에서는 이 아닌 bash이지만 대시와 같은 가벼운 쉘이라는 점에 유의하십시오. 쉘 스크립트가 bash에 특정한 것이라면 'sh''bash'으로 변경해야합니다. 어떤 경우

, 그것은 sh (또는 bash)이 스크립트에서 줄을 실행하기 위해 "잊지"가능성은 극히 가능성 (복권을 열 행의 시간을이기는 것보다 덜) 입니다. 또한 shFile이 예상 한 것임을 확인하십시오.

업데이트 된 스크립트를 살펴보면 오류는 거의 확실하게 평가하는 스크립트에 표시됩니다. 예를 들어 임시 파일이나 실수로 공유되는 리소스가 부족할 수 있습니다. decoder__ 스크립트를 게시하거나 shFile을 포함하여 문제를 재현 사항 : "10"출력이없는

/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" 

경우에, 당신은 정말 쉬에 문제가 있어요. 그렇지 않은 경우 (다시 말하지만, 확실성이 매우 높음) 문제는 실행중인 tempScript에 있습니다.

+0

리소스 문제인지 여부를 확인하기 위해 decoder__ 스크립트의 수를 줄이려고 시도했지만 스크립트 수가 줄어들더라도 마지막 스크립트는 항상 실행되지 않습니다. 'CD/수출/실험/hierMultiStream_audSpec_direct/decoder__10' '쉬 decoder.sh 평가>/수출/실험/hierMultiStream_audSpec_direct/tempScripts/n_10.out' 의혹 경우를 다음과 같이 샘플 decoder__ 스크립트입니다 그것은 decoder_script에 문제가 있습니다. 이전의 스크립트를 제외하고는 잘 실행되는 스크립트 순서를 변경하기 전에 앞서 지적했습니다. – Vijay

+0

명령의 시작 부분에서/bin/echo를 사용하여 실행하면 마지막 명령을 포함하여 모든 decoder__ 스크립트가 인쇄됩니다. – Vijay

+0

'sh '를'bash'로 바꾸려고했지만 아무 쓸모가 없었습니다. – Vijay

관련 문제