Я пытаюсь использовать plink в winpexpect для подключения к удаленному серверу Linux.Я использую следующий код:
child = winpexpect.winspawn('plink root@hostname')
child.logfile = sys.stdout
i = child.expect(['Password:')
child.expect('Password:')
child.sendline('password')
Вывод, который я получаю на стандартный вывод:
Using keyboard-interactive authentication.
Password: password
Using keyboard-interactive authentication.
Password:
Using keyboard-interactive authentication.
Password: Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...in expect_loop
raise TIMEOUT (str(e) + '\n' + str(self))
pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
...
command: plink
args: ['plink', 'root@hostname']
buffer (last 100 chars): yboard-interactive authentication.
Password:
Using keyboard-interactive authentication.
Password:
before (last 100 chars): yboard-interactive authentication.
Password:
Using keyboard-interactive authentication.
Password:
after: <class 'pexpect.TIMEOUT'>
...
Эквивалентный код работает в pexpect под Linux (замена модуля winpexpect на pexpect,и вызов plink с помощью ssh), поэтому я знаю, что ожидание соответствия () является правильным.Похоже, что winpexpect пишет на экран, и plink не регистрирует это как текст, введенный в поле пароля.
Кто-нибудь может обнаружить проблему здесь?