2013-03-23 2 views
2

하위 프로세스와의 통신을 테스트 중입니다. 정기적으로 데이터를 보내 서버를 시작해야합니다. 최종 목표는 meteo 데이터와 플로팅 서버를 획득하는 프로세스입니다. 샘플링 속도는 순서 또는 분입니다. 파이썬에서 ipc의 기본을 이해하기 위해이 두 조각의 코드를 작성했지만, 작동시킬 수조차 없습니다. 동기 발생은 문제가되지 않습니다.하위 프로세스에 연속적으로 데이터 전송

메인 프로세스

import sys, time 
from subprocess import Popen, PIPE 

print 'starting' 
proc = Popen (['python.exe', 
    'C:\Documents and Settings\Administrator\Desktop\sub.py'], 
       stdin = PIPE, stdout = PIPE) 
print 'launched' 

w = 0 
while True: 
    w += 1 
    time.sleep (2) 
    print 'writing', w 
    proc.stdin.write (repr(w)) 
    proc.stdin.flush() 
    print proc.stdout.read() 

구성 프로세스 : 메인 프로세스 차단

import sys, time 

print 'reading' 
v = 0 
while True: 
    v = sys.stdin.read() 
    sys.stdout.write('ACK') 
    sys.stdout.flush() 
    time.sleep (4) 

명백하게 서브은 ACK를 판독 송출되지 않는다. 내가 틀렸어? 덕분에

답변

1

전체 스트림을 읽으려고하므로 sys.stdin.read() 블록이 호출되므로 스트림이 닫힐 때까지 리턴 할 수 없습니다.

sys.stdin.readline()을 사용해보고 sys.stdout.write() (두 프로세스에서)을 사용하여 글을 쓸 때 새 라인을 추가하십시오 (예 : sys.stdout.write('ACK\n'). 이렇게하면 한 줄을 읽을 때까지 읽기 명령이 차단됩니다.

+1

위대한! 그것은 작동합니다. 그것은 포럼에서 내 첫 게시물, 정말 유용했습니다. 감사합니다 – user2202117

+0

네, 그럼 최고입니다. 도움이되는 답변을 찾으면 자유롭게 upvote 또는 accept하십시오. – shx2

관련 문제