Я привык запускать команду с помощью subprocess.Popen в своих скриптах Python. Большинству из них нравится:
Код: Выделить всё
try:
while True:
line = proc.stdout.readline()
if(proc.Poll() is not None):break;
parse(line)
except(KeyboardInterrupt) as E:
kill(proc)
Теперь у меня есть случай, когда команда (инструмент симулятора) получает «CTRL-C» в режим отладки (интерфейс командной строки), чтобы принять инструкции отладки, завершить работу при наличии инструкций и возобновить работу. похоже, что Popen не поддерживает передачу стандартного ввода в аргумент stdin, например stdin=input. Я знаю, что могу использовать os.system(cmd), которая использует стандартный ввод/вывод в качестве ввода/вывода, но это не мое решение.
так кто-нибудь может показать мне другое решение? заранее спасибо.
ПОПРОБУЙТЕ: Как сказал Ахмед АЕК, я попробую:
Код: Выделить всё
proc = Popen(shlex.split(cmd), stdin=sys.stdin, stdout=sys.stdout, stderr=STDOUT)
try:
proc.wait() #how do I get output from stdout
except KeyboardInterrupt:
proc.send_signal(signal.SIGINT)
proc.wait()
Теперь сочетание клавиш CTRL-C (SIGINT) может перевести команду в режим отладки. его функция похожа на os.system(cmd). Но как захватить выходные данные из stdout(sys.stdout) для поиска по некоторым ключевым словам, поэтому я использую не os.system(...), а subprocess.Popen(...)(с использованием proc.stdout.readline(), когда stdout=PIPE).
Подробнее здесь:
https://stackoverflow.com/questions/754 ... n-argument