Подпроцесс Python: передача нескольких входов / выходов назад и вперед - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь использовать подпроцесс. Открыть, чтобы позволить двум программам Python более или менее вести диалог. Я хочу иметь возможность отправлять входные данные от родителя к ребенку, получать ответ от ребенка, а затем на основе этого ответа отправлять новый ввод. subprocess.communicate () закрывает процесс после одного взаимодействия ввода-вывода. Можно ли оставить один и тот же подпроцесс открытым для нескольких операций ввода-вывода? В настоящее время мой код зависает.

Родительский код:

from __future__ import print_function
import subprocess
import sys


try:
     p = subprocess.Popen(['python','childprocess.py'],
                          stdin=subprocess.PIPE,
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE,
                          bufsize=1,
                          universal_newlines=True)
except Exception as e:
     print("Error: "+str(e))
     sys.exit(-1)

p.stdin.write('This is the first input\n')
p.stdin.flush()
print(p.stdout.readline())
p.stdin.write('This is the second input\n')
print(p.stdout.readline())

Код ребенка:

input_one = raw_input()
print "Input One: ",input_one
input_two = raw_input()
print "Input Two: ",input_two

В этом случае я могу просто дать два входа и затем прочитать два выхода, но если я хочу иметь возможность использовать дочерний выход для информирования родительского ввода (например, гадатель чисел), могу ли я сделать это с подпроцесс?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы захотите использовать функцию subprocess.Popen (), которая поддерживает процесс в действии.

Родственный S.O. вопрос для справки:

Поддерживать подпроцесс и давать ему команды? Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...