Python中的Web命令输出(stdout,stderr)

时间:2012-06-17 23:01:41

标签: javascript python websocket

最近,我使用Flask框架开发了一个简短的Python脚本,以通过HTTP启动进程(请参阅here)。现在有一个问题就是要有足够的技术将标准流(我对启动进程的 stdout stderr 特别感兴趣)“管道”到Web。

你认为最适合的方法是什么?首先,我认为websockets完全适合。但在我看来,大多数实现都掩饰了他们的连接客户端。我认为我需要这些信息才能将输出发送给所有这些信息。

编辑:我认为我的问题有点不清楚:我希望在网络界面中看到已执行命令的输出。因此,我必须通过HTTP以某种方式将已执行进程的stdout / stderr中的数据“传送”到Web界面。启动命令可能会运行一段(更长)时间。调用dd命令的示例不具代表性,因为它在给定设置中不输出任何内容。当然,我必须使用subprocess.Process类和对象的输出(例如,使用communicate()方法)。

2 个答案:

答案 0 :(得分:1)

不太清楚你的目标是什么。你的代码有这个。也许这是一个线索?

   current_app.process = subprocess.Popen(
            ['dd', 'if=/dev/zero', 'of=/dev/null'])

浏览子进程的文档。你会发现你可以指定stdout和stderr。 http://docs.python.org/library/subprocess.html#module-subprocess

一种策略可能是将stdout / err捕获到文件,然后将该文件重写为http响应。

答案 1 :(得分:1)

一种可行的方法(并且是非阻塞的,可以为多个客户端提供服务)是使用Twisted:

连接ProcessProtocol

http://twistedmatrix.com/documents/current/core/howto/process.html

到Twisted WebSocket服务器

https://github.com/tavendo/AutobahnPython

披露:我是高速公路的作者。