我有两个问题,一个是另一个的子集。
1)在Python和Clojure程序之间传递信息的最佳方法是什么。这个问题也可以扩展到任何像Scala这样的jvm语言。这些程序将在Linux下运行。
2)在Windows下执行此操作的最佳方式是什么?
详情如下。我想要一个Python程序来启动Clojure程序,知道Clojure程序何时完成,并检索运行Clojure程序的结果。
我知道在Python和Clojure程序之间,信息可以在专门为Clojure程序完成时存储信息而创建的数据库表中共享,或者甚至做一些笨重的事情,因为将结果文件留在已知的目录。
鉴于这是Linux,我可能使用管道共享信息,但我特别想知道Python和Clojure是否支持一个模块,这将有助于程序间通信。
谢谢。
答案 0 :(得分:5)
我不确定您的Clojure程序在做什么,但如果您只是想从Python执行Clojure代码,那么Clojure-Py可能会有所帮助:
https://github.com/halgari/clojure-py
例如,您可以在Python中执行此操作:
>>> import clojure.core
>>> clojure.core.cons(1, None)
(1)
免责声明,我是clojure-py的作者
答案 1 :(得分:2)
另一种IPC方法是使用套接字。我在python上创建了一个非常简单的套接字服务器,它接受字符串并在其上调用函数。然后,clojure实例可以连接到python服务器并将clojure表单作为数据发送。使用 pyclj ,使用 pyclj reader
将clojure数据转换为python表单,然后处理它,然后使用 pyclj返回clojure数据 writer
。这种方法更适合clojure,因为您只是一直在使用clojure数据。这样可以更灵活地运行python和clojure实例,并为异步通信提供更好的接口。
答案 2 :(得分:1)
如果表现很重要,那么Protocol Buffers是个不错的选择。 在Protocol Buffers with Clojure and Leiningen中可以很好地使用来自Clojure的protobuf。
答案 3 :(得分:0)
我不熟悉Clojure,但你可以使用python subprocess模块将json管道传送给它。
import json
from subprocess import Popen, PIPE
json_data = json.dumps({"key":"value"})
p = subprocess.Popen("closure-execution", stdout=PIPE, stdin=PIPE, sterr=PIPE)
# stuff some data into the pipe and wait for the process to end:
stdout, sterr = p.communicate(json_data)
或类似的东西......
答案 4 :(得分:0)