Не удается записать на стандартный ввод в подпроцесс Windows - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь взаимодействовать с программой командной строки 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

Вот скриншот кода и окна.Другие команды не открываются.

Console window screenshot

После прочтения команды "/ prep7" программа должна записать некоторый текст в stdout и остановитесь с подсказкой PREP7:.Однако, если я что-то наберу в новом окне консоли, я смогу прочитать больше данных из его stdout.

Я что-то здесь упускаю?Придется ли мне использовать win32gui, чтобы найти дескриптор окна и написать в него?

...