2013-03-23 2 views
2

Я тестирую связь с подпроцессом. Я должен запустить сервер, периодически отправляя данные. Конечной целью является процесс, который получает данные meteo и сервер печати. Частота выборки составляет порядка или минуты .... Я написал эти два фрагмента кода, чтобы понять основы ipc в python, но я даже не могу заставить их работать. Синхронизм не является проблемой.Постоянная передача данных в подпроцесс

основной процесс

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

Да, SO - лучшее. Когда вы найдете ответ полезным, не стесняйтесь повышать или принимать его. – shx2

Смежные вопросы