2011-10-06 103 views
1

我想建立一个SSH浏览器的客户端(类似于ajaxterm)。我已经构建了一个Python后端,它使用ParamikoSSHClient.invoke_shell(term='vt100')和一个与前端(HTML + AJAX)通信的Web服务器。当我通过SSH通道发送命令时,系统工作并显示输出,但输出包含VT100转义序列。vt100与python /浏览器的终端仿真

如果我理解正确,我从SSH通道获得的任何内容都应解释为24x80终端窗口的命令?这意味着转义序列可能会改变颜色,清除屏幕,删除线条,改变线条行为的方式......(我找到了一个好的列表here)这意味着我不能将它们清除出去?

我检查了Ajaxterm的源代码,但无法弄清楚如何使用终端类(所以我可以用它来达到我的目的)。

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

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

回答

2

几天前我试过做同样的事情。我没有完成它,但我发现了一些python终端模拟器库。

我选择pyte,它有一个干净的API和易于使用。在pyte的README结尾处可以找到执行同样工作的其他库的列表。

+0

谢谢!我试了一下,看起来很干净和有用。你有没有运气从中得到颜色?如果我理解正确,screen.display只返回字符内容? – johndodo

+0

screen.display只返回字符。唯一棘手的部分是显示器是一个Chars列表。 Char或多或少是一个命名的组件。 Char的有趣字段是实际字符的数据,以及颜色的bg和fg。还有一些其他的。您可以查看代码以获取更多信息:https://github.com/selectel/pyte/blob/develop/pyte/screens.py#L68 – madjar

+0

好的,我会的。我的Python技能仍然有点欠缺,但我会弄清楚。 :)否则pyte看起来完全是我在找什么,再次感谢! – johndodo