从网页界面运行Shell命令的最佳方法是什么?

8 投票
7 回答
4941 浏览
提问于 2025-04-16 03:40

想象一下,有一个网页应用,允许登录用户通过点击一个按钮在服务器上运行一个命令。这在大多数编程语言中通过一些标准的库工具是相对简单的。

但是,如果这个命令需要很长时间才能完成,你就不想让用户界面卡住。处理这个问题其实也不难,可以使用后台进程,或者把要执行的命令放到一个消息队列中(也许还可以把输出和状态保存起来,以便后续查看)。这样你可以快速返回一个信息,告诉用户我们会执行这个命令并稍后再联系。

我想要做的是,实时显示这个网页应用触发的命令的输出,像在终端中那样上下滚动的文本。

我大致有个想法,可能可以通过流式传输输出到一个websocket,然后直接把输出打印到屏幕上。

我想问的是:

有没有现成的插件、库或应用可以实现这个功能?我希望能找到一些可以使用或查看源代码的东西。理想情况下是开源的Python/Django或Ruby/Rails工具,但其他技术栈的也很有兴趣。

7 个回答

1

基于网页的SSH客户端是可以工作的,能够连接到主机(市面上有一些Java的SSH客户端)。

Ruby有一个基于网页的终端:http://tryruby.org(页面底部有源代码的链接)。你也可以通过jruby来嵌入Ruby:http://tim.lossen.de/2007/03/jruby/applet.html,还有这个链接:http://github.com/jruby/jruby/blob/master/samples/irb-applet.html

1

我不太确定这是不是你想要的,但网上有一些基于网页的SSH客户端。如果你很在意安全性,并且只是想要动态的反馈,你可以考虑使用comet技术,或者干脆用一个框架,保持自己的HTTP会话,直到所有内容都打印完毕。

1

我尝试用代码来回答我自己的问题,因为找不到合适的资料。希望这对遇到同样问题的人有帮助。

Redbeard 0X0A 给了我一些方向,我用 popen 写了一个独立的 Ruby 脚本,达到了我想要的效果。后来我把这个脚本扩展到使用 EventMachine,因为它提供了一种方便的方式来编写 websocket 服务器,使用它内置的 popen 方法解决了我的问题。

更多细节可以在这里找到 http://morethanseven.net/2010/09/09/Script-running-web-interface-with-websockets.html,代码在 http://github.com/garethr/bolt/

撰写回答