Я пытаюсь взаимодействовать с программой командной строки Windows, используя Python.Я использую модуль subprocess
для этого.Ниже приведен код, который запускает программу.
kwargs = dict(stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
p = subprocess.Popen("ansys191.exe", **kwargs)
Это открывает программу с новым окном консоли.Я могу прочитать его stdout
, используя следующий код.
while True:
line = p.stdout.readline().strip()
if line: print(line)
if line.startswith("BEGIN:") or line.startswith("PREP7:"):
break
После запуска программа останавливается с приглашением BEGIN:
.Это не выход.Тем не менее, это не работает, когда я пытаюсь записать команду в ее stdin
, например, такую:
p.stdin.write("/prep7")
p.stdout.readline() #Blocks here
Вот скриншот кода и окна.Другие команды не открываются.
После прочтения команды "/ prep7" программа должна записать некоторый текст в stdout
и остановитесь с подсказкой PREP7:
.Однако, если я что-то наберу в новом окне консоли, я смогу прочитать больше данных из его stdout
.
Я что-то здесь упускаю?Придется ли мне использовать win32gui
, чтобы найти дескриптор окна и написать в него?