2017-01-17 6 views
2

Я разрабатываю python gui для c-программы. Программа запрашивает два пароля. Как я могу подождать пароль promt, а затем вставить пароль в код?Python popen() вставить пароль при запросе на

На данный момент я пытаюсь сделать это с помощью:

subprocess.popen.communicate(input) 

Но это не работает, поскольку программа снова запрашивает пароль в оболочке.

Просто для понимания здесь является поток программы:

  • оболочки: выполнить программу с некоторыми параметрами
  • стандартный вывод: "Пожалуйста, вставьте Pw 1"
  • стандартного ввода: PW1
  • стандартный вывод: "пожалуйста, вставьте 2" PW
  • стандартного ввода: pw2
+0

Возможный дубликат [не может предоставить пароль к процессу с подпроцесса \ [питона \]] (http://stackoverflow.com/questions/25189348/unable-to-provide-password-to-a-process-with-subprocess-python) –

ответ

2

Следует учесть, используя другую библиотеку: Pexpect

Pexpect - это чистый модуль Python для нерестовых детских приложений; контроль над ними; и реагирования на ожидаемые закономерности в их продукции. Pexpect работает, как ожидал Дон Либес. Pexpect позволяет вашему скрипту порождать дочернее приложение и контролировать его, как если бы человек печатал команды .

Вот пример кода, чтобы дать имя пользователя и пароль при подключении к FTP-серверу:

import pexpect 
child = pexpect.spawn('ftp ftp.openbsd.org') 
child.expect('Name .*: ') 
child.sendline('bob') 
child.expect('Password:') 
child.sendline('thisisnotasecurepassword') 
+0

Спасибо Было так, и это сработало как шарм – Florian

+0

Ницца, хорошо день;) – iFlo