我最近完成了HTML和CSS课程,现在正在使用Javascript。我目前在Python方面有着不错的背景,并希望利用我的网络编程经验。
我的问题是,我怎样才能创建一个可以在我的HTML页面中显示我的python代码的终端环境?例如,如果我有一个名为hello.py
的脚本,并且它向用户打印了一条hello world
消息,我怎么能获取该脚本,并在我的页面中显示其结果,所以当你加载它时,它会读作“你好世界”吗?
我希望这很清楚。我没有引用Python来显示HTML,比如像Django这样的框架,而是如何获取脚本,运行它,并将其输出显示到网页上?
答案 0 :(得分:0)
不考虑安全问题,您可以通过多种方式实现此目的。
通过在CSS中显示虚假的用户提示并提供设法模拟命令行的textarea或输入区域,您可以采用更简单的“无状态,有点”方法。当用户点击ENTER时,您将获得输入,将其发送到本地shell并捕获输出,然后将其显示回格式化为终端。我认为这可以在AJAX中做得更好。
由于您在Python中工作,因此a related question and answer是扭曲的。
上述方法只允许您进行非常简单(但仍然很危险:-))的互动。如果您启动了ncurses
程序或任何尝试读取输入的交互式程序,您将立即陷入困境。但这足以运行您的hello.py
。
您可以使用经过测试的库(例如this jQuery plugin。
)改进方法更复杂的方法是在本地分配终端(每个用户会话一个),捕获所有键盘事件并将它们“回显”到终端,并读取控制台。您需要知道如何提供具有适当功能的有效终端环境,然后您需要解码程序输出(使用ANSI终端命令完成)并“重建”(虚拟)监视器外观,然后发送此“监视器” “查看客户端浏览器以某种方式显示(AJAX,websockets ......)。结果会更好,但努力会比例更大。
后一种方法(在Python中)导致诸如this或this之类的项目,它们通过websockets与客户端进行通信。
所有这些不需要来做你需要的事情;你似乎需要模块执行器(不确定)和聊天功能之间的东西(这看起来是强制性的)。
您需要的是抽象您的程序的输入和输出,以便它可以与Web浏览器“对话”。在这种情况下,您可以将程序作为守护程序运行(有些模块允许守护基于stdio的程序)。然后,用户界面(您可以使用jQuery插件)收集玩家A的输入并将其发送到程序,收集输出并将其发送回A的屏幕。你需要考虑天赋和异步性,或者转向管理:玩家A可以输入五个命令,而玩家B只能输入一个。此外,继续,您将必须管理会话并断开/重新连接用户。
不幸的是,“网络”世界的方法和问题与“键盘”世界完全不同。