【问题标题】:How to display a terminal-like environment, that shows the output of Python scripts, within a web browser?如何在 Web 浏览器中显示类似终端的环境,显示 Python 脚本的输出?
【发布时间】:2016-10-04 04:41:56
【问题描述】:

我最近完成了 HTML 和 CSS 课程,现在开始学习 Javascript。我目前在 Python 方面有不错的背景,并且想利用我的经验进行 Web 编程。

我的问题是,我该如何创建一个可以在我的 HTML 页面中显示我的 python 代码的终端环境?例如,如果我有一个名为 hello.py 的脚本,并且它向用户打印了一条 hello world 消息,我如何获取该脚本并在我的页面中显示它的结果,所以当你加载它时,它会显示'你好世界'?

我希望这很清楚。我不是在引用使用 Python 来显示 HTML,比如 Django 之类的框架,而是如何获取脚本、运行它并将其输出显示到网页?

【问题讨论】:

  • 您是否只想离线运行一次并生成可以查看的页面,或者让某人能够从网页调用您的脚本并查看结果。
  • 我需要第二个选项。我希望能够通过浏览器窗口运行一个小的 text-rpg,并运行诸如 combat 函数之类的东西,并更新类,需要这种能力吗?
  • 脚本必须在服务器端执行。这意味着您将需要 HTML 和 JavaScript 以外的其他语言。您可以使用 PHP,或者如果您不想学习一门新语言,您可以使用 NodeJS(服务器上的 JavaScript)。话虽如此,为简单的任务混合尽可能多的语言并不是一个好主意。最好坚持使用 JavaScript 和 HTML,因为它们是为网络设计的。
  • 另一种方法是使用 SimpleHTTPServer 运行服务器,并使用 AJAX 访问端点;但是,这可能会很快变得非常复杂。

标签: python html web


【解决方案1】:

抛开安全问题不谈,您可以通过多种方式做到这一点。

您可以通过在 CSS 中显示虚假的用户提示并提供设法模拟命令行的文本区域或输入区域来追求更简单的“无状态”方法。当用户点击 ENTER 时,您将获得输入,将其发送到本地 shell 以执行并捕获输出,然后将其显示回来,就像终端一样格式化。我认为这可以在 AJAX 中做得更好。

由于您使用 Python,因此这里是 a related question and answer,表示扭曲。

上述方法只允许您非常简单(但仍然很危险:-))交互。如果您启动了ncurses 程序或任何类型的尝试读取输入的交互式程序,您会立即陷入困境。但是,这足以运行您的 hello.py。

您可以使用经过测试的库(例如 this jQuery plugin)改进该方法。

更复杂的方法是在本地分配一个终端(每个用户会话一个),捕获所有键盘事件并将它们“回显”到终端,然后读取控制台。您需要知道如何提供具有适当功能的有效终端环境,然后您需要解码程序输出(使用 ANSI 终端命令完成)并“重建”(虚拟)监视器外观,然后发送此“监视器" 以某种方式显示客户端浏览器的视图(AJAX、websockets...)。结果会更好,但付出的努力会相应地更大。

后一种方法(在 Python 中)导致了诸如 this 或 this 之类的项目,它们通过 websockets 与客户端进行通信。

更新

所有这些都是不需要来做你需要的;您似乎需要模块执行器(不确定)和聊天功能(这看起来是强制性的)之间的一些东西。

您需要抽象程序的输入和输出,以便它可以与网络浏览器“对话”。在这种情况下,您可以将程序作为守护程序运行(有些模块允许对基于 stdio 的程序进行守护程序)。然后,用户界面(您可以使用 jQuery 插件)收集玩家 A 的输入并将其发送到程序,收集输出并将其发送回 A 的屏幕。你需要考虑临时性和异步性,或者轮流管理:玩家 A 可能会输入五个命令,而玩家 B 会慢慢地只输入一个。此外,您还必须管理会话和断开/重新连接用户。

不幸的是,“网络”世界的方法和问题与“键盘”世界截然不同。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 2019-02-19
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多