2016-11-03 2 views
0

저는 파이썬의 subprocess을 사용하여 파이썬 스크립트 (script2.py이라고 부르 자)를 실행하고 있습니다. 그 스크립트는 을 사용하여 리디렉션되는 stdout으로 정보를 인쇄합니다. 문제는 script2.py이 정보 인쇄를 중지하지만 백그라운드에서 계속 실행된다는 것입니다. 내가 원하는 건 그 상태를 감지하는 것입니다 (아무것도 쓸모가 없을 때 stdout). 그렇게 할 방법이 있습니까?stdout에 데이터가 있는지 감지하는 방법은 무엇입니까?

for i in range(0,1000): 
    if i < 500: 
     print "HUEHUE" 

다음 500 반복의 아무것도 일어나지 않습니다

script2.py하고 내가 스크립트를 다시 실행하기 위해 감지해야 할 작업은 다음과 같습니다

나는 다음과 같이이 동작을 시뮬레이션 할 수 있습니다.

+0

스크립트를 가져 와서 실행할 때 하위 프로세스를 사용해야하는 이유는 무엇입니까? –

+0

@ cricket_007 이것이 이상적인 솔루션 인 반면, 작성하지 않은 스크립트로 작업하는 경우가 있으며 결과물을 처리 한 다음 스크립트와 상호 작용하는 것이 더 쉽습니다. 그가 직접 쓴다면 나는 너와 완전히 동의한다. – bravosierra99

+0

불행히도'script2.py'는 저에게 쓰여지지 않았습니다.''pause '상태를 감지하기 위해'script2.py'를 실행하는 스크립트 만 받았습니다. –

답변

0

Popen.stdout stdout 인수가 PIPE 인 경우이 특성은 하위 프로세스의 출력을 제공하는 파일 개체입니다. 그렇지 않으면 없음입니다.

python documentation

그래서 당신은 아마 시간의 양을 결정해야 당신이 당신의 프로세스 초기 출력을 고려하기 전에 수행해야을 기다립니다. 따라서 proc.stdout.readline() 다음 수면 (1) 다음 헹구고 반복하십시오.

+0

실제로'script2.py'는 13 분 동안 실행되어야하지만, 그 13 분 안에 어딘가에'script2.py'가 실패하고 처음부터 다시 실행해야합니다. 그래서 내가 그 상태를 감지하고 처음부터 그것을 실행하여 약간의 시간을 절약해야하는 이유입니다. –

+0

그건 완전히 다른 질문입니다. subprocess.check-call을 실행하면 스크립트가 실행되고 0이 아닌 반환 값을 반환하면 예외가 발생합니다. 당신은 그것을 잡아서 필요하다면 스크립트를 재실행 할 수 있습니다. – bravosierra99

관련 문제