2012-07-25 3 views
5

Ich habe zwei Fragen, eine eine Untermenge der anderen.Was ist der einfachste Weg für Clojure und Python-Programme Informationen zu teilen?

1) Was ist der beste Weg, um Informationen zwischen einem Python und Clojure-Programm zu übergeben. Diese Frage könnte auch auf jede andere Sprache wie Scala ausgedehnt werden. Diese Programme würden unter Linux laufen.

2) Was wäre der beste Weg, dies unter Windows zu tun?

Die Details sind wie folgt. Ich möchte, dass ein Python-Programm ein Clojure-Programm startet, weiß, wann das Clojure-Programm beendet ist, und die Ergebnisse der Ausführung des Clojure-Programms abrufen kann.

Ich weiß, dass zwischen einem Python - und Clojure - Programm Informationen in einer Datenbanktabelle geteilt werden können, die speziell für das Ablegen von Informationen erstellt wurde, wenn das Clojure - Programm abgeschlossen wurde, oder sogar etwas so Klobes wie das Hinterlassen einer Ergebnisdatei in einem bekanntes Verzeichnis.

Da dies Linux ist, kann ich wahrscheinlich Informationen mit einer Pipe teilen, aber ich frage mich speziell, ob es ein von Python und Clojure unterstütztes Modul gibt, das die Kommunikation zwischen den Programmen erleichtern würde.

Vielen Dank.

Antwort

0

Ich bin nicht vertraut mit Clojure, aber Sie könnten wahrscheinlich Json mit dem Python subprocess Modul pipe.

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) 

oder somthing wie das ...

5

Ich bin nicht sicher, was Ihr Clojure-Programm tut, aber wenn Sie einfach suchen Clojure Code von Python ausführen, dann vielleicht dann Clojure-Py kann Hilfe:

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

Als Beispiel können Sie dies in Python tun:

>>> import clojure.core 

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

Haftungsausschluss, sie ist der Autor von Clojure-py

0

Eine Option Jython nutzen würde Ihren Python-Code in der gleichen JVM wie Clojure zu laufen - dann ist die Interop wesentlich einfacher wäre.

Die Interop sollte in diesem Fall auch OS-unabhängig sein, was ein netter Bonus ist.

See:

2

Ein weiterer IPC Ansatz wäre es, Steckdosen zu verwenden. Ich habe einen sehr einfachen Socket-Server auf Python erstellt, der Strings akzeptiert und eine Funktion aufruft. Dann kann sich die Clojure-Instanz mit dem Python-Server verbinden und Clojure-Formulare als Daten senden. Verwendung pyclj, verwenden, um die pycljreader clojure die Daten in Python Formen zu drehen, sie dann verarbeiten, und dann die pycljwriter Verwendung clojure Daten wieder zurück. Dieser Ansatz ist eher clojure-freundlich, da Sie ständig mit Clojure-Daten arbeiten.Dies ermöglicht auch mehr Flexibilität bei der Ausführung der Python- und Clojure-Instanzen und bietet eine bessere Schnittstelle für die asynchrone Kommunikation.

https://github.com/sunng87/pyclj

Verwandte Themen