0

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

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

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

4

2 回答 2

1

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

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

浏览子流程的文档。你会发现你可以指定标准输出和标准错误。 http://docs.python.org/library/subprocess.html#module-subprocess

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

于 2012-06-17T23:59:58.283 回答
1

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

连接一个 ProcessProtocol

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

到 Twisted WebSocket 服务器

https://github.com/tavendo/AutobahnPython

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

于 2012-06-18T08:44:58.663 回答