Множество входов и выходов в подпроцессе Python связываются

Мне нужно сделать что-то вродеэта почта, но мне нужно создать подпроцесс, который может вводить и выводить много раз. Принятый ответ на этот пост имеет хороший код ...

from subprocess import Popen, PIPE, STDOUT

p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)    
grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print(grep_stdout.decode())

# four
# five

... что я хотел бы продолжить, как это:

grep_stdout2 = p.communicate(input=b'spam\neggs\nfrench fries\nbacon\nspam\nspam\n')[0]
print(grep_stdout2.decode())

# french fries

Но, увы, я получаю следующую ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/subprocess.py", line 928, in communicate
    raise ValueError("Cannot send input after starting communication")
ValueError: Cannot send input after starting communication

Метод proc.stdin.write () не позволяет собирать выходные данные, если я правильно понимаю. Какой самый простой способ сохранить линии открытыми для текущего ввода / вывода?

Изменить: ====================

Это выглядит какpexpect полезная библиотека для того, что я пытаюсь сделать, но у меня проблемы с тем, чтобы заставить ее работать. Вот более полное объяснение моей актуальной задачи. я используюhfst получить грамматический анализ отдельных (русских) слов. Следующее демонстрирует его поведение в оболочке bash:

$ hfst-lookup analyser-gt-desc.hfstol
> слово
слово   слово+N+Neu+Inan+Sg+Acc 0.000000
слово   слово+N+Neu+Inan+Sg+Nom 0.000000

> сработай
сработай    сработать+V+Perf+IV+Imp+Sg2 0.000000
сработай    сработать+V+Perf+TV+Imp+Sg2 0.000000

> 

Я хочу, чтобы мой сценарий мог получать анализы по одной форме за раз. Я пробовал такой код, но он не работает.

import pexpect

analyzer = pexpect.spawnu('hfst-lookup analyser-gt-desc.hfstol')
for newWord in ['слово','сработай'] :
    print('Trying', newWord, '...')
    analyzer.expect('> ')
    analyzer.sendline( newWord )
    print(analyzer.before)

# trying слово ...
# 
# trying сработай ...
# слово
# слово слово+N+Neu+Inan+Sg+Acc 0.000000
# слово слово+N+Neu+Inan+Sg+Nom 0.000000
# 
# 

Я, очевидно, неправильно понял, чтоpexpect.before делает. Как я могу получить вывод для каждого слова, по одному за раз?

Ответы на вопрос(0)

Ваш ответ на вопрос