通信Python脚本之间的两个
问题描述:
的方法问题:通信Python脚本之间的两个
我有它运行在我的系统上的无限循环“主” python脚本,我想将信息发送到它(例如JSON数据串)偶尔还会有一些其他的Python脚本,这些脚本会在稍后由我自己或其他程序启动,并在发送字符串后立即结束。
我不能在这里使用子进程,因为我的主脚本不知道对方何时运行以及它们将执行什么代码。
我在考虑让主脚本在本地端口上侦听,并让其他脚本将该端口上的字符串发送给它,但有没有更好的方法来做到这一点?
答
zeromq:http://www.zeromq.org/ - 是进程间通信恕我直言,最好的解决办法,有一个外观极好的Python绑定:http://www.zeromq.org/bindings:python
答
由于“主”脚本貌似可以使用Web API提升它的服务。 bottle是完美的解决方案。有了这个额外的代码你的Python脚本能够接受请求并处理它们:
import json
from bottle import run, post, request, response
@post('/process')
def my_process():
req_obj = json.loads(request.body.read())
# do something with req_obj
# ...
return 'All done'
run(host='localhost', port=8080, debug=True)
客户端脚本可以使用httplib的将消息发送到服务器,读取响应:
import httplib
c = httplib.HTTPConnection('localhost', 8080)
c.request('POST', '/process', '{}')
doc = c.getresponse().read()
print doc
# 'All done'
答
在如果您有兴趣实施Mike在Python 3.x中提供的客户端脚本,您将很快发现没有可用的httplib。幸运的是,库http.client完成了同样的事情。
否则是相同的:
import http
c = http.client.HTTPConnection('localhost': 8080)
c.request('POST', '/process', '{}')
doc = c.getresponse().read()
print(doc)
虽然这是老我会想出我会发布此,因为我今天只是使用的服务器也有类似的问题。
套接字是一种选择,但还有其他选项取决于您使用的是哪种操作系统。 – Aya 2013-04-25 11:17:47