2010-07-07 4 views
2

새 명령 줄 창에서 자체 프로세스를 포크하는 일부 c 스크립트를 순차적으로 실행하고 완료 될 때 "Press any key to continue..."을 제공하고 싶습니다. 기술적으로 특수 컴파일러입니다. 그것은 명령 행 윈도우를 팝업하고 컴파일이 성공했는지 여부를 알려줍니다. 각 파일 반복하면서 그러나이 반환 0이해야 전에하고 있습니다 새로운 프로세스가 컴파일 할 것을 명령 줄 창 포크 .. 이것하위 프로세스를 사용하여 프로세스 종료시기 알아 내기

내 첫 번째 시도는

process = subprocess.Popen(cmd) 
    process.wait() 

이었다. 불행히도, 이것은 "계속하려면 아무 키나 누르십시오 ..."라고 기다리지 않고 내 얼굴에서 날려 버립니다. 내부 프로세스가 완료되면 wait() 호출이 전달 된 것 같습니다 (액세스 권한이없는 경우).

대신 "계속하려면 아무 키나 누르십시오 ..."를 기다릴 수 있습니까?

  process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE) 
      completed = False 
      while not completed: 
       if process.poll() is not None: 
        completed = True 

      print "communicating" 
      process.communicate("k") 
      print "communicated" 
+1

새로운 코드는 무의식적입니다. 프로세스가 죽을 때까지 기다리는 중입니다 (wait()는 CPU를 과열하지 않고서 만 동일하게 수행합니다). 그리고 나서 죽은 프로세스와 통신하려고합니다. 실행중인 스크립트가 백그라운드에서 새 프로세스를 포크 한 다음 즉시 반환하면 수행 할 수있는 작업이 많지 않습니다. 손자 프로세스의 PID를 가져 와서 os.wait()을 수행해야합니다. –

답변

2

당신은 차단하지 않고 상태를 확인 subprocess.poll을 사용할 수 있으며, subprocess.communicate에 : 그것은 또한 언론 전에 다른 정보 라인을 계속하려면 아무 키나 .. 현재

를 인쇄하는 것, 이것이 내 코드는 무엇인가 하위 프로세스에 정보를 보냅니다.

+0

"계속하려면 아무 키나 누르십시오 ..."나는 그것이 어떤 가치도 아직 반환하지 않았다고 생각 했습니까? 이것은 서브 프로세스를 만들지 않을 것인가? 쓸모없는 종류인가? – hungrydude

+0

예, "계속하려면 아무 키나 누르십시오 ..."라는 문구를 인쇄하는 것을 기다리는 것 같지 않습니다. – hungrydude

+0

의사 소통을 사용해보십시오. 물론 이것은'stdout'과'stdin'이'서브 프로세스 .PIPE'이므로'.Popen (cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE) '으로 변경해야합니다. –

관련 문제