2012-07-25 7 views
5

私は2つの質問を持っています.1つは、もう一方のサブセットです。ClojureとPythonプログラムが情報を共有する最も簡単な方法は何ですか?

1)PythonとClojureプログラム間で情報をやり取りする最も良い方法は何ですか?この質問はScalaのようなjvm言語にも拡張することができます。これらのプログラムはLinux上で動作します。

2)Windowsでこれを行うにはどうすればよいでしょうか?

詳細は次のとおりです。 PythonプログラムがClojureプログラムを起動し、Clojureプログラムがいつ完了したかを知り、Clojureプログラムの実行結果を取得したいと思います。

私は、PythonとClojureプログラムの間で、Clojureプログラムが完了したときに情報を格納するために特別に作成されたデータベーステーブルで情報を共有できること、あるいは結果ファイルを既知のディレクトリ。

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のプログラムが何をしているのかわからないんだけど、あなたは、単に、パイソンからClojureのコードを実行するために探しているならば、おそらくその後、Clojureの-Pyがよいですヘルプ:

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

例として、あなたはPythonでこれを行うことができます:

>>> import clojure.core 

>>> clojure.core.cons(1, None) 
(1) 
その後、相互運用が実質的に容易になるだろう -

免責事項は、私はClojureの-PYの作者だ

0

1つのオプションは、Clojureのと同じJVMであなたのPythonコードを実行するためにJythonを使用することです。

この場合、interopもOSに依存しません。これは素晴らしいボーナスです。

参照:

2

を別のIPCのアプローチは、ソケットを使用することです。私は、Python上で文字列を受け取り、その上で関数を呼び出す非常に単純なソケットサーバーを作成しました。次に、clojureインスタンスはpythonサーバーに接続し、clojureフォームをデータとして送ることができます。 pycljを使用して、その後、PythonのフォームにClojureのデータを回し、それを処理した後、pycljwriterを使ってClojureのデータをバック返すためにpycljreaderを使用しています。このアプローチは、あなたが常にclojureデータを使って作業しているので、より魅力的です。これにより、pythonインスタンスとclojureインスタンスがより柔軟に実行され、非同期通信のためのより良いインタフェースが提供されます。

https://github.com/sunng87/pyclj

関連する問題