2012-08-22 4 views
0

에게 보내고 있습니다. 프로그램 X에서 프로그램 Y를 열려고 시도하고 프로그램 X에서 계속 작업하려고합니다. 그러나 Y가 명령 줄을 사용하여 호출되면 다음 항목이 건너 뛰기 시작합니다. 코드를 입력하고 키 입력에도 계속 응답합니다.popen이 명령을

그래서 문제는 X가 코드를 완성하는 방법입니다.

내가 사용

proc=subprocess.Popen([cmd], shell=True) 
proc.communicate() 

뿐만 아니라 :

cmd를이 인수를 사용하여 터미널에 대한 명령입니다
os.system([cmd]) 

.

나는 리눅스를 도망 간다.

+0

나는 혼란 스럽다 : 먼저 Y가 X에 의해 (프로그래밍 방식으로) 호출된다고 말하면 명령 행에서 호출하는 것을 언급한다. 당신은 정말로 "X"를 의미 했습니까? –

답변

0

두 가지 방법 (Popen + communicate()os.system는) 동기, 부모 프로세스 블록 때문에 실행 아이가 완료 될 때까지이다.

두 프로세스가 동시에 실행되도록하려면 다른 방법으로 출력을 수집해야합니다.

몇 가지 아이디어 : 부모 프로세스에서 스레드 내부 코드 (threading 참조)

  1. 이동 proc.communicate()

  2. 지구 밖으로 및 stdout pipes보다 다른 방법으로 아이 출력을 수집합니다. 자세한 아이디어는 multiprocessing 모듈을 참조하십시오. 또는 용기를 내면 ZeroMQ을보십시오 (과장 될 수도 있습니다. 마음에 듭니다. 통신 라이브러리라고 생각합니다).

+0

헤이, 나는 2.4 컴파일러 버전 만 사용한다고 생각했다. 당신이 언급 한 방법들이 여전히 효과가 있다고 생각 하는가? –

+0

와우! 버전 2.4는 실제로 구식입니다 (거의 4 세). '다중 처리 (multiprocessing) '모듈이 2.6에서 소개되었습니다. ZeroMQ에 대해서는 모르겠지만 실제로 귀하의 사례에 어울리지 않는다고 생각합니다. 'threading' 모듈이 최선의 방법 일 것입니다. –

관련 문제