Я пытаюсь выполнить два процесса связи с использованием трубы. Я сделал это в родительском процессе:создание программ python «чат» по трубе
process = subprocess.Popen(test, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
process.stdin.write("4\n");
output = process.stdout.read()
print output
и в дочернем процессе:
inp = raw_input()
integer = int(inp)
print integer**2
while(True):
pass
Я бы ожидать, что родительский процесс для печати 16 ... К сожалению, она остается висеть без печати ничего. Замена бесконечного цикла на спящий режим в течение 5 секунд делает родительский процесс бездействующим в течение 5 секунд и ПОСЛЕ того, что печатает 16. Это показывает, что родительский процесс получает только результат от дочернего элемента после его завершения.
Я хотел бы знать, можно ли вводить информацию до завершения программ. Моя идея - передать информацию через этот канал, получить вход, обработать его и вывести результат в трубе, чтобы другой мог продолжить обработку.
Любая помощь? Спасибо,
Manuel
вы пробовали промывку потока, когда вы пишете '«4 \ п» '? –
Да, это не проблема. Дочерний процесс фактически получает это 4, и я видел его, потому что после прочтения этого ввода я пишу его в обычный файл и затем вводим бесконечный цикл. Родительский процесс - это тот, который блокируется в части read(). –
Из любопытства, почему вы не использовали 'sys.stdin.readline()' в дочернем процессе? –