Запуск интерактивной команды из Python

У меня есть скрипт, который я хочу запустить из Python (2.6.5 ), который следует приведенной ниже логике:

  • Запрашивать у пользователя пароль. Похоже на ("Введите пароль :")(*Примечание :Ввод не отражается на экране)
  • Вывод ненужной информации
  • Запросить у пользователя ответ ("Бла-бла-файл.txt бла-бла (Да/Нет )? :")

Последняя строка приглашения содержит текст, который мне нужно проанализировать (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и, возможно, о том, как разобрать последнюю строку в выводе, если вы чувствуете себя щедрым, хотя, вероятно, я мог бы понять это в конце концов.

19
задан connectyourcharger 2 October 2018 в 11:47
поделиться