Clojure和Python程序共享信息的最简单方法是什么?

2024-10-06 06:34:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个问题,一个是另一个问题的子集。在

1)在Python和Clojure程序之间传递信息的最佳方式是什么。这个问题也可以扩展到任何jvm语言,比如Scala。这些程序将在Linux下运行。在

2)在Windows下执行此操作的最佳方法是什么?在

具体情况如下。我希望Python程序启动Clojure程序,知道Clojure程序何时完成,并检索运行Clojure程序的结果。在

我知道,在Python和Clojure程序之间,信息可以在专门为Clojure程序完成时存储信息而创建的数据库表中共享,甚至可以做一些像将结果文件留在已知目录中这样笨拙的操作。在

考虑到这是Linux,我可能可以使用管道共享信息,但是我特别想知道Python和Clojure是否都支持一个模块来促进程序间的通信。在

谢谢。在


Tags: 文件方法程序目录语言信息数据库linux
3条回答

另一种IPC方法是使用套接字。我在python上创建了一个非常简单的socket服务器,它接受字符串并调用函数。然后,clojure实例可以连接到python服务器并将clojure表单作为数据发送过来。使用pyclj,使用pycljreader将clojure数据转换成python形式,然后处理它,然后使用pycljwriter返回clojure数据。这种方法对clojure更友好,因为您一直在使用clojure数据。这还允许在运行python和clojure实例的地方有更大的灵活性,并为异步通信提供了更好的接口。在

https://github.com/sunng87/pyclj

我不熟悉Clojure,但您可能可以使用pythonsubprocess模块将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)

或者类似的事情。。。在

我不确定您的Clojure程序在做什么,但是如果您只是想从Python执行Clojure代码,那么Clojure Py可能会有帮助:

https://github.com/halgari/clojure-py

例如,可以在Python中执行以下操作:

>>> import clojure.core

>>> clojure.core.cons(1, None)
(1)

免责声明,我是clojure py的作者

相关问题 更多 >