跨平台自动化ncurses类型telnet会话的解决方案

3

背景

我在网络和电信领域的工作中,需要自动化处理一些传统硬件只能通过 craft 端口(RS-232 串行端口)、SNMP 或 telnet 访问的情况。有时候,telnet 是获取特定信息的唯一途径,但是由于 telnet 是为人类设计的界面,因此需要进行屏幕抓取。此外,还存在仅更新部分内容以节省带宽的屏幕抓取问题(参见 ncurses)。在我的工作中,我使用了 ActiveState Expect 和 Python telnet 库。

问题

哪些语言和库可以自动化处理 telnet 会话,并满足以下要求:

  • 适用于大型项目(例如 Tcl 在我的经验中似乎不如 Python 扩展性好,而且已经过时)
  • 跨平台(例如 Pexpect 不支持 WindowsActivestate Expect 在 Windows 上的表现也不同,并且需要在较新的机器上关闭 DEP)
  • 能够屏幕抓取会话,以便在命令行程序中更新部分内容的情况下使用(类似于 ncurses 的行为)
  • 免费,就像啤酒一样!

最好的解决方案还应包括以下内容:

  • 易于重新分发(例如不需要在计算机上安装某些庞大的运行时库)
  • 也适用于 SSH、串行连接和其他命令行接口。
1个回答

2

请查看ActiveTcl发行版中的demos/Expect/term_expect。它模拟了一个光标可寻址终端,可以让您测试特定屏幕位置的输出。请查看文件末尾的示例屏幕抓取代码。


很有趣,但是如果用户不知道输出将位于何处怎么办?此外,位置是否会根据当前屏幕大小而变化,或者大多数终端都同意使用默认屏幕大小? - pokstad
1
早期终端是硬件设备,大多数都有80列x 24行,因此我希望这是默认大小,并且这是term_expect使用的大小。您可以尝试查找所需字段的屏幕位置,或者您可以使用[$term get 1.0 end]获取整个屏幕区域,然后使用regexp或其他字符串命令在其中搜索。 - Colin Macleod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接