Два (связанных?) Вопроса здесь.
Я пытался написать программу для запуска внешнего процесса, а затем одновременно прочитать из stdout и записать в stdin. Казалось, что все работает, но процесс не отвечает на данные, отправленные на его стандартный канал. Вы знаете, почему это будет? (1)
Этот второй вопрос уже решен.
Я написал два сценария тестирования, первый был таким:
# recv.py
while True:
print(input())
Второй был разработан для вызова другого с использованием Popen, чтобы дать ему произвольный ввод:
# send.py
recv = subprocess.Popen(["python", "recv.py"], stdin=subprocess.PIPE)
recv.stdin.write(b"Hello\n")
recv.stdin.write(b"World.\n")
Вот что я получил, когда запустил:
skyler@pro:testing$ python send.py
skyler@pro:testing$ Traceback (most recent call last):
File "recv.py", line 30, in <module>
main()
File "recv.py", line 26, in main
print(input())
File "<string>", line 1, in <module>
NameError: name 'Hello' is not defined
По какой-то причине похоже, что результат input()
обрабатывается как часть строки, а не как строка, действительно, когда я устанавливаю переменную Hello
в recv.py, он печатает содержимое Hello
. Почему это происходит? (2)
Я использую Python 3.1.2 на Mac OSX.