У меня есть простая двоичная программа командной строки hello
, которая выводит в STDOUT:
What is your name?
и ждет, пока пользователь введет его. После получения их ввода он выводит:
Hello, [name]!
и завершается.
Я хочу использовать Python для выполнения вычислений в окончательном выводе этой программы ("Hello, [name]!"
), однако перед окончательным выводом я хочу, чтобы скрипт Python по существу "был" двоичной программой. Другими словами, я бы хотел, чтобы Python перенаправил все запросы в STDOUT, а затем принял ввод пользователя и передал его программе. Однако я хочу скрыть окончательный вывод, чтобы обработать его и показать свои результаты пользователю. Я не хочу копировать поведение hello
в скрипте, так как эта простая программа является заменой для более сложной программы, с которой я на самом деле работаю.
Я надеялся, что в subprocess
будет какая-то механика, где я смогу сделать что-то похожее на:
while process.is_running():
next_char = process.stdout.read(1)
if next_char == input_prompt_thing: # somehow check if the program is waiting for input
user_input = raw_input(buffer)
process.stdin.write(user_input)
else:
buffer += next_char
Я играл с subprocess
и, по сути, дошел до того, что понял, что могу использовать process.stdout.read(1)
для чтения из программы до того, как она начала блокироваться, но я не могу понять, как разорвать этот цикл перед блоками процесса мой скрипт на Python. Я не слишком знаком с консольным вводом / выводом, и это не является для меня большой областью знаний, поэтому я начинаю чувствовать себя довольно растерянным. Я ценю любую помощь!