Python subprocess.run C Программа не работает - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь написать коды для запуска исполняемого файла C, используя Python.

Программу C можно запустить в терминале, просто позвонив ./myprogram, и она предложит меню выбора, как показано ниже:

1. Login
2. Register

Теперь, используя Python и подпроцесс, я пишу следующие коды:

import subprocess
subprocess.run(["./myprogram"])

Программа Python работает, но ничего не показывает (Ошибок тоже нет!). Есть идеи, почему это происходит?

Когда я пытался:

import subprocess
subprocess.run(["ls"])

Отображаются все файлы в этом конкретном каталоге. Так что я полагаю, что это правильно.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы должны открыть подпроцесс следующим образом:

import subprocess
cmd = subprocess.Popen(['./myprogram'], stdin=subprocess.PIPE)

Это означает, что cmd будет иметь .stdin, в который вы можете писать; print по умолчанию отправляет вывод на stdout вашего Python скрипта, который не имеет связи с stdin подпроцесса. Так что сделайте это:

cmd.stdin.write('1\n')  # tell myprogram to select 1

, а затем, вполне вероятно, вам следует:

cmd.stdin.flush()  # don't let your input stay in in-memory-buffers

или

cmd.stdin.close()  # if you're done with writing to the subprocess.

PS Если ваш Python скрипт длинный - запущенный процесс в системе * nix, и вы замечаете, что ваш подпроцесс завершился, но все еще отображается как процесс Z (zomb ie), проверьте этот ответ.

0 голосов
/ 13 июля 2020

Может грипп sh stdout?

print("", flush=True,end="")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...