Выполнение нескольких команд с помощью Popen.stdin

Я хотел бы выполнить несколько команд в автономном приложении, запущенном из сценария Python, с помощью каналов. Единственным путем я мог надежно передать команды stdin программы, использовал Popen.communicate, но это закрывает программу после того, как команда выполняется. Если я использую Popen.stdin.write, чем команда выполняется только в 1 раз приблизительно из 5, это не работает надежное. Что я делаю неправильно?

Уточнить немного:

У меня есть приложение, которое слушает stdin для команд и выполняет их линию за линией. Я хотел бы иметь возможность запустить приложение и передать различные команды ему, на основе пользовательского взаимодействия с GUI. Это - простой тестовый пример:

import os, string
from subprocess import Popen, PIPE

command = "anApplication" 
process = Popen(command, shell=False, stderr=None, stdin=PIPE)

process.stdin.write("doSomething1\n")
process.stdin.flush()
process.stdin.write("doSomething2\n")
process.stdin.flush()

Я ожидал бы видеть результат обеих команд, но я не получаю ответа. (Если я выполняю одну из строк Popen.write многократно, она иногда работает.)

И если я выполняюсь:

process.communicate("doSomething1")

это работает отлично, но приложение завершается.

19
задан SilentGhost 29 January 2010 в 14:08
поделиться

1 ответ

Похоже, ваше приложение относится к входу от трубы в странном способе. Это означает, что он не будет получать все команды, которые вы отправляете, пока не закроете трубу.

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

process.stdin.write("command1\n")
process.stdin.write("command2\n")
process.stdin.write("command3\n")
process.stdin.close()

Это не звучит, как ваша программа Python является чтением вывода из приложения, поэтому не должно иметь значения, если вы отправляете команды все сразу так Отказ

-1
ответ дан 30 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: