2012-07-15 5 views
0

비슷한 질문이 여기에 게시되었지만 코드를 작동시킬 수 없다는 것을 알고 있습니다. 하나의 파이썬 프로그램 출력을 다른 입력으로 파이프하려고합니다. 입력을 기다리고 하나는 raw_input을했다 ('>')파이프 라이닝 두 개의 파이썬 프로그램

내가 실행하는 데 노력하고있어 코드는 다음과 같습니다

import subprocess 
gen = subprocess.Popen(['python', 'first.py'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
start = subprocess.Popen(['python','second.py'], stdin=gen.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
start.communicate() 

first.py : 출력은 '아무튼

try: 
    while(1): 
     print gen() 
     time.sleep(1) 
except KeyboardInterrupt: 
    sys.exit(1) 

아무것도 생산하지 않는다

어떤 조언?

+0

이것은 동작을 설명합니다. http://bugs.python.org/issue1191964 fist.py 프로그램을 변경하여 매번 하나의 값만 반환하고 매번 호출하는 second.py 만 변경하려고합니다. 하위 주문으로 처리 할 수 ​​있습니까? – gizmo

+0

올바른 입력을 제공하는 해킹을 수행했지만 이것이 문제를 해결하는 좋은 방법인지 확실하지 않은 경우 http://pastebin.com/PwUtNpxa 및 t3.py : http://pastebin.com/K3JdYa13 – gizmo

+0

올바른 입력을 제공하는 해킹을 수행했지만 이것이 문제를 해결하는 좋은 방법인지 확실하지 않은 경우 http://pastebin.com/PwUtNpxa 및 t3.py : http://pastebin.com/K3JdYa13 동안 (1) : 단어 = raw_input을 ('>') 결과 = 맞춤법 검사기 (워드) 결과의 경우 : 다른 인쇄 결과 유일한 문제는 추가 한 >> – gizmo

답변

0

완전한 second.py는 무엇입니까? raw_input()과 함께 작동해야하지만 sys.stdin에서 읽으려고 했습니까? 표시된 코드 스 니펫이 제대로 작동하는 것처럼 보입니다.

또 다른 가능한 문제는 프로그램이 계속 실행될 때 first.py가 완료에 이르지 못하는 것일 수 있습니다. 두 x 째 서브 프로세스 명령은 첫 x ​​째 서브 프로세스 명령이 완료되지 않으면 실행되지 않습니다. 그래서 무한 루프없이 first.py를 사용해보십시오. 멈추고 시도해보십시오. 아마도 배관이 작동 할 것입니다.

+0

시도를 출력 점이다 : print 'NO SUGGESTION' keyboardInterrupt : sys.exit (1) – gizmo

+0

예, 루프없이 first.py에서 작동합니다. – gizmo

+1

좋아요. 그러면 first.py에서 일부 출력을 생성하고 싶습니다. .py를 사용하면 first.py가 일부 출력을 생성하므로이를 소비합니다. 그리고 그걸 영원히 원해. 파이프 라이닝이 작동하는 방식은 두 번째 명령이 첫 번째 명령이 완전히 실행되었을 때만 실행되기 때문에 내 지식으로는 파이프 라이닝이 불가능합니다. 귀하의 경우, first.py 전혀 완료에 도달하지 않습니다. 원하는 것을 얻으려면 가장 간단한 솔루션은 TCP 소켓입니다. 한 프로세스가 다른 프로세스로 데이터를 보내고 다른 프로세스는 데이터를 수신 할 때만 작동합니다. – vaidik

관련 문제