Как читать данные, передаваемые в канал подпроцесса в Python - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать рабочий подпроцесс, который работает параллельно с моим основным приложением.Для этого я использую subprocess.Popen и встроенные PIPE.

    p = subprocess.Popen( cmd , stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True)

    time.sleep(.5)

    data = p.stdout.readline()

    for i in range(10): # repeat several times to show that it works
        p.stdin.write("test")
        line = p.stdout.readline()
        print(line) # read output

Я могу получать данные на стандартный вывод PIPE в переменную data , ноОператор read в цикле всегда возвращает пустую строку.

Мой подпроцесс чрезвычайно прост:

print("Its working", flush=True)
while(True):
    r=input()
    print("Its working", flush=True)

Может показаться, что мой подпроцесс не может прочитать данные, отправленные через stdin.Если я удалил команду r = input () и только постоянно печатал строку, она работает, и я получаю строку несколько раз, но в тот момент, когда я пытаюсь проверить входящую строку через input (), она никогда не получает ее.

Пытаюсь ли я неправильно захватить данные на входящей ТРУБЕ, и если да, то как мне это сделать?Я пробовал другие варианты, такие как:

r = sys.stdin.buffer.read()
r = sys.stdin.buffer.readline()
r = sys.stdin.read()
r = sys.stdin.readline()

, но ни один из них не работает.

1 Ответ

0 голосов
/ 11 октября 2018

Мне не хватало \ n со стороны основной программы.Спасибо JohanL за указание на это.Все работает сейчас.

...