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