Python 在winpexpect中运行plink

Python 在winpexpect中运行plink,python,plink,Python,Plink,我正在尝试使用winpexpect中的plink连接到远程Linux服务器。我正在使用以下代码: child = winpexpect.winspawn('plink root@hostname') child.logfile = sys.stdout i = child.expect(['Password:') child.expect('Password:') child.sendline('password') 我在stdout上得到的输出是: Using keyboard-intera

我正在尝试使用winpexpect中的plink连接到远程Linux服务器。我正在使用以下代码:

child = winpexpect.winspawn('plink root@hostname')
child.logfile = sys.stdout
i = child.expect(['Password:')
child.expect('Password:')
child.sendline('password')
我在stdout上得到的输出是:

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'>
...
使用键盘交互身份验证。
密码:密码
使用键盘交互身份验证。
密码:
使用键盘交互身份验证。
密码:回溯(最近一次呼叫最后一次):
文件“”,第1行,在
…在expect\u循环中
提升超时(str(e)+'\n'+str(self))
pexpect.TIMEOUT:在read_nonblocking()中超过超时。
...
命令:plink
参数:['plink','root@hostname']
缓冲区(最后100个字符):yboard交互式身份验证。
密码:
使用键盘交互身份验证。
密码:
before(最后100个字符):yboard交互式身份验证。
密码:
使用键盘交互身份验证。
密码:
之后:
...
等效的代码在Linux下的pexpect中工作(用pexpect替换winpexpect模块,用ssh替换plink调用),因此我知道expect()匹配是正确的。看起来winpexpect正在写入屏幕,而plink没有将其注册为输入密码字段的文本


有人能在这里发现问题吗?

这是一个修复了bug的分叉winexpect项目:
你可以试试

我在winpexpect和plink上遇到了类似的问题。有一个适合我的解决方案。连接到我的串行接口的设备在本地回显,并使winpexpect感到困惑。将sendline()替换为具有以下功能的函数:

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

每打一次电话,我就把它修好。child.pexpect(cmd)在目标种子之前吃掉本地回送的字符\n并开始响应。

您找到解决方案了吗?我尝试了BitBucket中修改后的winpexpect脚本,但没有成功。谢谢,不幸的是,克丽西没有找到解决办法。看起来像winpexpect中的一个bug,但我自己没有时间去尝试解决它。