【问题标题】:CPython doesn't interact well with spawned tty terminals on WindowsCPython 不能与 Windows 上生成的 tty 终端很好地交互
【发布时间】: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


【解决方案1】:

winpexpect/plink 有什么问题? 您可以尝试使用分叉的winpexpect,它修复了 winpexpect-1.5 上的许多问题

【讨论】:

  • plink 不模拟传入的终端数据。有点乱。
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 2017-06-16
  • 2018-05-07
  • 2016-12-08
  • 2011-10-31
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多