5

2 つの質問があります。1 つは他のサブセットです。

1) Python と Clojure プログラムの間で情報を渡す最良の方法は何ですか? この質問は、Scala などの任意の jvm 言語にも拡張できます。これらのプログラムは Linux で実行されます。

2) Windows でこれを行う最善の方法は何ですか?

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

私は、Python と Clojure プログラムの間で、Clojure プログラムが完了したときに情報を保管する目的で特別に作成されたデータベース テーブルで情報を共有したり、既知のディレクトリに結果ファイルを残すような厄介なことをしたりすることさえできることを知っています。

これが Linux であることを考えると、おそらくパイプを使用して情報を共有できますが、プログラム間通信を容易にする Python と Clojure の両方でサポートされているモジュールがあるかどうかを特に知りたいです。

ありがとうございました。

4

5 に答える 5

5

あなたの Clojure プログラムが何をしているのかわかりませんが、単に Python から Clojure コードを実行したいだけなら、Clojure-Py が役立つかもしれません:

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

例として、Python でこれを行うことができます。

>>> import clojure.core

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

免責事項、私は clojure-py の作者です

于 2012-07-25T15:33:08.343 に答える
2

別の IPC アプローチは、ソケットを使用することです。文字列を受け入れて関数を呼び出す非常に単純なソケットサーバーをPythonで作成しました。次に、clojure インスタンスは Python サーバーに接続し、clojure フォームをデータとして送信できます。pycljを使用して、pycljを使用してclojure readerデータを Python 形式に変換し、それを処理してから、pyclj を使用して clojure データを返します writer。このアプローチは、常に clojure データを操作しているだけなので、より clojure フレンドリーです。これにより、python および clojure インスタンスが実行されている場所での柔軟性も向上し、非同期通信のためのより優れたインターフェイスが提供されます。

https://github.com/sunng87/pyclj

于 2012-07-26T12:46:43.817 に答える
1

パフォーマンスが重要な場合は、Protocol Buffersが適切なオプションです。Clojure の protobuf の使用については、Protocol Buffers with Clojure and Leiningen で詳しく説明されています。

于 2012-07-26T22:36:12.240 に答える
0

私はClojureに精通していませんが、Pythonサブプロセスモジュールを使用してjsonをClojureにパイプすることができます。

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)

またはそのような何か...

于 2012-07-25T14:35:27.567 に答える
0

1 つのオプションは、Jythonを使用して、Clojure と同じ JVM で Python コードを実行することです。そうすれば、相互運用が大幅に容易になります。

この場合、相互運用性も OS に依存しない必要があります。これは素晴らしいボーナスです。

見る:

于 2012-07-26T07:28:01.877 に答える