将Python脚本的状态流式传输到网站
我有一个简单的工作流程,像这样 [步骤 0]->[1]->[2]->...->[步骤 N]
。主程序知道它当前处于哪个步骤(状态)。
我想把这个状态实时传输到一个网站上(在局域网内),这样当我的同事们打开,比如说 http://thecomputer:8000
,就能看到我们工作流程的当前状态和相关细节。
我考虑过把脚本的状态写入一个 StringIO
对象(进行流式传输),然后用 Javascript
刷新浏览器,但老实说,我不知道该怎么实际操作。
有什么建议吗?
5 个回答
我对Python的工作原理不太了解,但如果是PHP的话,这个问题就简单多了(前提是你知道该怎么做)。
假设我的应用程序是myapp.py,它从步骤1运行到步骤N。我会让它返回一个简单的文本,也就是一个数字。这个数字代表当前的步骤。例如,当我访问http://localhost/myapp.py时,它返回5。过了30分钟后,我刷新页面,它返回15。
接下来说说JavaScript的部分。我建议使用jQuery,这样会让事情变得更简单、更快。我只需要做以下操作:
$('#streaming').load('http://localhost/myapp.py');
这段代码会把页面的内容加载到ID为streaming的DIV里。但这只会在你加载页面的时候发生。为了让它每隔一段时间就更新一次,你可以使用JavaScript的setTimeout函数。
var t=setTimeout("javascript statement",milliseconds);
最好把加载步骤的部分放在一个函数里,这样在页面加载时和使用setTimeout时都可以调用它。如果你的脚本停止工作(比如返回一个特定的数字或消息),也可以帮助你停止setTimeout。
如果你只想要一个快速的解决方案,而不是完整的网页,可以看看 SimpleHTTPServer。你可以把状态信息以文件的形式写入一个目录,这样其他人就能看到更新的内容。
虽然不太美观,但非常快速且简单。
想要演示的话,只需输入 python -m SimpleHTTPServer
。这会创建一个网页,地址是 http://[你的电脑名称或IP]:8000
,内容是你启动时所在目录的文件。文件是可以直接点击的。如果你点击一个文件,它会在浏览器中显示;如果你点击一个目录,你就会进入那个目录,里面的内容会列出来。
你可以从一个空目录开始,创建一些文件来记录你想要报告的步骤。比如,你可以有一个名为“step 1.txt”的文件,里面写着更详细的信息。步骤1可以是一个目录,当步骤1完成时,你的脚本就会创建这个目录,依此类推。
另外,你也可以看看 Twisted,它可以让你直接从Python脚本中处理HTTP请求。
如果你想要更复杂一点的功能,可以用类似的方法。从你的Python脚本中把输出写入一个空目录。然后在一个用PHP搭建的网页服务器上,写一个简单的脚本来检查那个目录并显示找到的内容。设置页面的刷新间隔,这样它就会在用户的浏览器中自动更新。
你可以让Python脚本生成一个XML文件,然后在你的网站上通过AJAX请求来获取这个文件,从中获取状态信息。