Как организовать общение процессов через stdin/stdout?

Задача у меня несколько нетривиальная, организовать общение между процессами без сокетов (только stdin/stdout).
Основной скрипт, который запускает рядом лежащий скрипт:
import subprocess
messages = ['test1', 'test2', 'test3', 'test4', 'test5', ]
process = subprocess.Popen(['C:\\Python27\\python.exe', 'subscript.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
while len(messages)>0:
	process.stdin.write(messages.pop() + '\n')
	print process.stdout.readline()


Рядом с ним лежит subscript.py:
import sys
while True:
	print sys.stdin.readline()


После запуска первого файла не происходит ничего. Как я понял, данные отправляются в stdin дочернего процесса, но сам дочерний процесс не может их прочесть (или они до него не доходят?).
Если руками открыть subprocess.py - он отрабатывает как надо.
В чем может быть проблема?

UPD:
Если в первом файле после process.stdin.write(.....) добавить process.stdin.close(), то отправляется одно значение, но stdin закрывается для записи...
  • Вопрос задан
  • 2110 просмотров
Решения вопроса 1
IzeBerg
@IzeBerg Автор вопроса
Нашлось решение:
import subprocess
messages = ['test1', 'test2', 'test3', 'test4', 'test5', ]
process = subprocess.Popen(['C:\\Python27\\python.exe', 'subscript.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
while len(messages)>0:
	process.stdin.write(messages.pop() + '\n')
	process.stdin.flush() 
	print process.stdout.readline()
process.terminate()


subscript.py:
import sys
while True:
	sys.stdout.write(sys.stdin.readline())
	sys.stdout.flush()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 130 000 ₽
deeplay Новосибирск
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽
25 окт. 2020, в 20:06
500 руб./в час
25 окт. 2020, в 19:57
30000 руб./за проект
25 окт. 2020, в 19:37
2500 руб./за проект