使用Python/浏览器进行VT100终端仿真
我正在尝试为网页浏览器构建一个SSH客户端(类似于ajaxterm)。我已经搭建了一个使用Paramiko的Python后端,利用SSHClient.invoke_shell(term='vt100')
,并且有一个与前端(HTML + AJAX)通信的网络服务器。这个系统可以正常工作,当我通过SSH通道发送命令时,它会显示输出,但输出中包含了VT100转义序列。
如果我理解得没错,从SSH通道获取的任何内容都应该被视为24x80终端窗口的命令?这意味着这些转义序列可以改变颜色、清屏、删除行、改变行的表现方式……(我找到了一份不错的列表在这里)这也就意味着我不能简单地把它们清除掉?
我查看了Ajaxterm的源代码,但没搞明白Terminal类是怎么用的(所以我想用它来满足我的需求)。
我的问题是:有什么简单的方法可以解析输出流,并在浏览器中正确显示终端屏幕吗?换句话说,有没有库可以解析输出并为我保留屏幕内容?
如果我对终端的内部工作原理理解错了,请告诉我。我过去对它们没有太多经验。:)
1 个回答
4
几天前我也试着做同样的事情。虽然没有完成,但我找到了一些可以在终端使用的Python库。
我选择了pyte,这个库的接口很简洁,使用起来也很简单。在pyte的说明文档最后,还有其他做类似工作的库的列表。