最近,我使用Flask框架开发了一个简短的Python脚本,以通过HTTP启动进程(请参阅here)。现在有一个问题就是要有足够的技术将标准流(我对启动进程的 stdout 和 stderr 特别感兴趣)“管道”到Web。
你认为最适合的方法是什么?首先,我认为websockets完全适合。但在我看来,大多数实现都掩饰了他们的连接客户端。我认为我需要这些信息才能将输出发送给所有这些信息。
编辑:我认为我的问题有点不清楚:我希望在网络界面中看到已执行命令的输出。因此,我必须通过HTTP以某种方式将已执行进程的stdout / stderr中的数据“传送”到Web界面。启动命令可能会运行一段(更长)时间。调用dd
命令的示例不具代表性,因为它在给定设置中不输出任何内容。当然,我必须使用subprocess.Process
类和对象的输出(例如,使用communicate()
方法)。
答案 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
披露:我是高速公路的作者。