我正在寻找使用telnetlib
时调整终端大小的方法。我用Paramiko的resize_pty在SSH上取得了类似的效果,但是我也需要支持telnet协议。这是否可能(telnet甚至有控制流)?在
注意,telnetlib不是必需的-如果有更好的库,我会很乐意使用它。在
更新(更多背景知识):我正在构建一个基于web的接口,用于连接到网络设备。前端是使用JS/AJAX构建的,它基本上只是向后端发送击键并从后端接收屏幕内容。后端是用Python编写的,负责打开到设备的SSH/telnet会话,向设备发送击键并获取输出流,然后通过VT100虚拟终端(pyte)传递。虚拟屏幕的内容随后被发送回前端。当用户想在浏览器中调整终端屏幕大小时,问题就出现了。使用SSH,我只需通过Paramiko发送resize_pty()
,然后调整pyte的虚拟终端屏幕大小。但是对于telnet,我找不到合适的调整大小函数来告诉设备它应该调整终端的大小。这可能吗?在
好吧,我已经组装了以下杰作:
现在来解释一下。在
首先,
telnetlib
不支持直接发送命令;它只是转义命令。因此,要发送命令,我们必须直接使用底层套接字。我们使用Telnet
对象实例的get_socket()
方法(t
这里)。在此处组装的
NAWS
命令由RFC 1073定义。width
和height
变量是常规的Python整数,它们被压缩成两个16位无符号整数。在请注意,这不是一个完美的解决方案,我不确定它是否真的对你有用。最重要的是,在功能协商期间,
telnetlib
将通知服务器它WON'T NAWS
,因此特定服务器实际上可能忽略这些命令。在如果是这样的话,您可能必须使用set_option_negotiation_callback()。遗憾的是,这意味着您将不得不处理通常
telnetlib
为您提供的所有选项。不过,在这方面没有任何便利。在相关问题 更多 >
编程相关推荐