Бегу плинк в winpexpect - PullRequest
       22

Бегу плинк в winpexpect

2 голосов
/ 29 сентября 2011

Я пытаюсь использовать 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 не регистрирует это как текст, введенный в поле пароля.

Кто-нибудь может обнаружить проблему здесь?

Ответы [ 2 ]

2 голосов
/ 07 сентября 2012

Вот разветвленный проект winexpect с исправлением ошибки: https://bitbucket.org/weyou/winpexpect Вы можете попробовать его.

0 голосов
/ 30 марта 2015

Я столкнулся с похожей проблемой с winpexpect и plink. Этот вопрос имел решение, которое работало для меня. Устройство, подключенное к моему последовательному интерфейсу, отражало вещи локально и сбивало с толку winpexpect. Замена sendline () на функцию, которая выполняет:

    child.send(cmd)
    child.pexpect(cmd)
    child.send('\n')

за каждый звонок исправил это для меня. child.pexpect (cmd) съедает локально отображаемые символы перед тем, как целевое начальное число \ n, и начинает отвечать.

...