使用Python/浏览器进行VT100终端仿真

3 投票
1 回答
6903 浏览
提问于 2025-04-17 03:47

我正在尝试为网页浏览器构建一个SSH客户端(类似于ajaxterm)。我已经搭建了一个使用Paramiko的Python后端,利用SSHClient.invoke_shell(term='vt100'),并且有一个与前端(HTML + AJAX)通信的网络服务器。这个系统可以正常工作,当我通过SSH通道发送命令时,它会显示输出,但输出中包含了VT100转义序列。

如果我理解得没错,从SSH通道获取的任何内容都应该被视为24x80终端窗口的命令?这意味着这些转义序列可以改变颜色、清屏、删除行、改变行的表现方式……(我找到了一份不错的列表在这里)这也就意味着我不能简单地把它们清除掉?

我查看了Ajaxterm的源代码,但没搞明白Terminal类是怎么用的(所以我想用它来满足我的需求)。

我的问题是:有什么简单的方法可以解析输出流,并在浏览器中正确显示终端屏幕吗?换句话说,有没有库可以解析输出并为我保留屏幕内容?

如果我对终端的内部工作原理理解错了,请告诉我。我过去对它们没有太多经验。:)

1 个回答

4

几天前我也试着做同样的事情。虽然没有完成,但我找到了一些可以在终端使用的Python库。

我选择了pyte,这个库的接口很简洁,使用起来也很简单。在pyte的说明文档最后,还有其他做类似工作的库的列表。

撰写回答