Подпроцесс Popen stdin будет вводиться и запускаться только после завершения скрипта - PullRequest
0 голосов
/ 24 января 2020

Описание:

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

У меня есть это:

from subprocess import Popen
from subprocess import PIPE as p

proc = Popen("cmd",stdout=p,stdin=p,shell=True)

, поэтому обычно мы делаем, если нам нужно передать входные данные процессу, используя proc.stdin.write(), но кажется, что строка будет передаваться и работать только после python сценарий завершен

например, у меня есть

#same thing above
proc.stdin.write("ping 127.0.0.1".encode())
time.sleep(10)

сценарий будет ждать 10 се c, затем пройдет и запустит команду ping. это означает, что невозможно получить результат stdout.read(), потому что ничего нет.

Я пытался использовать subprocess.Popen.communicate(), но он закрывает канал после одного ввода.

Есть ли способ решить вопрос "только запустить команду после скрипта fini sh" или заставить communicate() не закрывать канал?

1 Ответ

2 голосов
/ 24 января 2020

Записывает в буферизованные каналы, вам нужно грипп sh в буфер.

proc.stdin.write("ping 127.0.0.1".encode())
proc.stdin.flush()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...