【发布时间】:2012-09-21 00:06:09
【问题描述】:
每次我尝试使用 winpexpect 来生成终端(例如:openssh、ssh)。如果我这样做winpexpect.winspawn('ssh ...'),我会遇到“不会分配伪终端,因为标准输入不是终端。”。如果我强制使用winpexpect.winspawn('ssh -t -t ...') 的终端,那么即使 ssh 客户端确实连接到服务器,我的读取缓冲区也将一无所获。其他交互式终端也是如此,它们只是挂起,读取缓冲区中没有任何显示。但是对于终端的命令,例如ping winpexpect 有效。
我发现真正起作用的是使用 putty 的 plink.exe,winpexpect.winspawn('plink ...'。这与 putty.exe 相同,但它不进行终端仿真,我只获取原始 telnet/解密的 ssh 数据。然而,这并不是真正理想的解决方案。
我真的很困惑如何让一个 spawner/expect 库与 Windows 上的终端一起工作!我什至尝试过使用 expectJ,只是纯 Java,这也有同样的问题。
【问题讨论】:
-
你有没有想过用 paramiko 来代替?
-
这可能与 pty 不是 Windows 原生有关。我不确定他们如何实现它,但很可能他们必须以某种方式模拟它们。
os.openpty函数甚至在 Windows 上都不存在。所以我希望它是“骰子”。你在运行这是cygwin吗?还是使用原生 Python 构建? -
paramiko... 需要大量重写。我正在尝试移动使用 telnetlib 编写的东西,它已经有了期望的方法。我的目标是使用 winpexpect 调用 ssh 客户端。这将是一种非常简单的方法,不需要重写。
-
@Keith CPython,本机窗口。我想如果通过 cygwin,我会得到我正在寻找的东西。
标签: python terminal expect tty pexpect