Запуск интерактивной команды из Python
У меня есть скрипт, который я хочу запустить из Python (2.6.5), который следует логике ниже:
Prompt user for password. Looks like ("Enter password: ") (*Note: Input does not echo to screen) Output irrelevant information Prompt user for response ("Blah Blah filename.txt blah blah (Y/N)?: ")Последняя строка подсказки содержит текст, который мне нужно проанализировать (filename.txt). Предоставленный ответ не имеет значения (программа может фактически завершиться, не предоставив его, пока я могу разобрать строку)
Мои требованияsomewhat похожий наОбертывание интерактивного приложения командной строки в сценарии Python, но ответы там кажутся немного запутанными, и мой по-прежнему зависает, даже когда ОП упоминает, что это не для него.
Оглядываясь вокруг, я пришел к выводу, чтоsubprocess
это лучший способ сделать это, но у меня есть несколько проблем. Вот моя линия Попен:
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
When I call a read()
or readline()
on stdout
, the prompt is printer to the screen and it hangs.
If I call a write("password\n")
for stdin
, the prompt is written to the screen and it hangs. The text in write()
is not written (I don't the cursor move the a new line).
If I call p.communicate("password\n")
, same behavior as write()
Я искал несколько идей здесь о том, как лучше всегоstdin
и, возможно, как разобрать последнюю строку в выводе, если вы чувствуете себя щедрым, хотя я, возможно, смогу со временем это выяснить.