2012-05-29 5 views
2

를 호출하고, 다음 코드 통신 : 일부 쉘 스크립트에파이썬 하위 프로세스가 중단 파이썬 3.2을 사용하여 쉘 스크립트

p = subprocess.Popen(['../start_server.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out,err = p.communicate() 

if out != None : 
    out = out.decode('utf-8') 
if err != None : 
    err = err.decode('utf-8') 

print('out ',out) 
print('err ',err) 

, 그것은 잘 작동하고 내 출력을 얻을. 다른 사람들에게 그것은 단지 매달린다. 모든 경우에 쉘 스크립트는 오류없이 명령 행에서 실행됩니다. 내가 볼 수있는 유일한 공통점은 (일반적으로) 응답이없는 출력이있는 것입니다. 물건이 실패하면 실행중인 프로세스를 확인하고 파이썬 스크립트가 아직 실행되고 있지 않음을 알 수 있습니다.

쉘 스크립트를 호출하는 신뢰할 수있는 방법은 무엇입니까 내 파이썬 프로그램에 제어권을 반환 하시겠습니까?


편집 :

사용 파이프는 popen과 같은 유일한 요구 사항은 쉘 스크립트가 종료 할 때 해당 컨트롤 내 파이썬 스크립트로 반환된다, 요구 사항은 아닙니다. 쉘 스크립트가 결코 명령 프롬프트로 돌아 오지 않으면 내 파이썬 스크립트도 결코 반환되지 않습니다.

쉘 스크립트를 사용하여 항상 명령 프롬프트로 돌아가서 어떻게하면 파이썬 프로그램을 다시 제어 할 수 있습니까?

하나 추가 비트 필자가 발견 가르치 려하시기 바랍니다 그들은 명령에 돌아 너희 'nohup을'에 대한 호출로 끝나는 것 같다 "정지"하는 쉘 스크립트입니다 - 위에 나열된 필자 어떤 것이 더 좋은 방법이 프로그래머 경우
아무런 문제가없는 프롬프트.

+0

스크립트가 수행중인 작업 일 수 있습니까? (다른 프로세스 생성 중)? – jdigital

+0

내 코드 조각은 다양한 쉘 스크립트를 호출합니다. 그들 모두는 새로운 프로세스를 시작하거나 기존 프로세스를 중지합니다. 일부는 작동하지만 일부는 작동하지 않습니다. 그러나 모든 경우에 쉘 스크립트는 명령 프롬프트에서 정상적으로 실행되고 오류가 발생하지 않으며 예상 한대로 수행됩니다. 우리의 기존 프로덕션 스크립트 호출을 자동화하려고 시도하고 있으므로 변경 작업을 수행하는 것은 문제가되지 않습니다. – Jon

+0

나는 당신이 어떤 것을 바꿀 것을 제안하지 않았고, 나는 당신에게 문제의 원인을 결정하는 데 도움이 될만한 조언을 줄 것이라고 조언했다. – jdigital

답변

0

무엇이 쉘 스크립트를 호출하고 언제나 내 제어 도구 을 내 파이썬 프로그램으로 되돌릴 수있는 확실한 방법은 무엇입니까?

파이프를 사용하는 경우 이는 스크립트에 따라 달라집니다. 좀 더 일반적인 대답은 본질적으로 halting problem이며 강력한 StackOverflow조차도 그렇게 할 수 없습니다.

나는 당신이보고있는 특정 문제를 해결할 수 있도록 재빨리 파헤 치고 재현 가능한 케이스를 만들 것을 권장합니다.

편집

당신이 파이프를 필요로하지 않는 경우, 단지 표준 출력과 표준 에러 매개 변수를 생략 (또는 PIPE 이외로 설정). python subprocess management을 참조하십시오.

+1

쉘 스크립트가 명령 프롬프트로 결코 돌아 오지 않는다면 파이썬 스크립트도 똑같이 할 것으로 기대합니다. 하지만 그건 사실이 아닙니다. 완료 될 때 모든 셸 스크립트는 명령 프롬프트로 돌아갑니다. – Jon

+1

stdin 및 stdout이 콘솔 (tty) 대신 파이프에 연결된 경우 프로그램의 동작이 변경 될 수 있습니다. 가장 주목할 만하게, 완충 행동은 변화하지만, 다른 다른 것들이 될 수도있다.그래서 당신이 묘사하는 상황이 그 모든 놀라운 일은 아닙니다. – jdigital

관련 문제