2012-07-25 62 views
5

我有两个问题,一个是另一个的子集。Clojure和Python程序共享信息的最简单方法是什么?

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

2)在Windows下最好的方法是什么?

详细情况如下。我想要一个Python程序来启动一个Clojure程序,知道Clojure程序何时完成,并检索运行Clojure程序的结果。

我知道在Python和Clojure程序之间,信息可以在专门为Civejure程序完成时存放信息而创建的数据库表中共享,或者甚至做一些像留下结果文件那样笨重的东西已知的目录。

鉴于这是Linux,我可以使用管道共享信息,但我特别想知道是否有Python和Clojure支持的模块可以促进程序间通信。

谢谢。

回答

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) 

或财产以后这样的...

5

我不知道你的Clojure的程序是干什么的,但如果你只是希望通过Python执行Clojure的代码,那么也许再Clojure的-PY可求助:

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

举个例子,你可以在Python中做到这一点:

>>> import clojure.core 

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

免责声明,我的Clojure-PY的作者

0

一种选择是使用Jython在同一个JVM运行Python代码Clojure的 - 那么互操作将是明显更容易。

在这种情况下,interop也应该是OS独立的,这是一个很好的奖励。

参见:

2

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

https://github.com/sunng87/pyclj

相关问题