У меня есть script, который я хочу запустить из python (2.6.5), который следует за логикой ниже:
- Запрос пароля. Похож ( "Введите пароль:" ) (* Примечание: вход не отображается на экране)
- Вывести нерелевантную информацию
- Запросить пользователя для ответа ( "Blah Blah filename.txt blah blah (Y/N)?:" )
В последней строке приглашения содержится текст, который мне нужно проанализировать (filename.txt). Предоставленный ответ не имеет значения (программа действительно могла выйти из нее без предоставления одного, если я могу разобрать строку)
Мои требования несколько схожи с Обтекание приложения интерактивной командной строки в python script. Может быть, им немного толще, но ответы там кажутся немного запутанными, а мой все еще висит, даже когда OP упоминает, что это не для него.
Посмотрев вокруг, я пришел к выводу, что подпроцесс - лучший способ сделать это, но у меня есть несколько проблем. Строка POpen ниже
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
-
Когда я вызываю read() или readline() на stdout, приглашение - это принтер на экране, и он зависает.
-
Если я вызываю запись ( "password\n" ) для stdin, приглашение записывается на экран, и оно зависает. Текст в write() не написан (я не курсор перемещает новую строку).
-
Если я вызываю p.communicate( "password\n" ), то такое же поведение, как write()
Я искал несколько идей здесь, чтобы наилучшим образом ввести stdin и, возможно, проанализировать последнюю строку на выходе, если вы чувствуете себя щедрым, хотя я, вероятно, мог бы понять это в конечном итоге. Спасибо!