2012-07-25 12 views
5

Tengo dos preguntas, una es un subconjunto de la otra.¿Cuál es la forma más sencilla para que los programas Clojure y Python compartan información?

1) ¿Cuál es la mejor manera de pasar información entre un programa Python y Clojure? Esa pregunta también podría extenderse a cualquier lenguaje jvm como Scala. Estos programas se ejecutarían bajo Linux.

2) ¿Cuál sería la mejor manera de hacer esto en Windows?

Los detalles son los siguientes. Me gustaría que un programa de Python inicie un programa Clojure, sepa cuándo se ha completado el programa Clojure y recupere los resultados de ejecutar el programa Clojure.

Sé que entre un programa de Python y Clojure, la información podría compartirse en una tabla de base de datos creada específicamente para depositar información cuando el programa Clojure se haya completado, o incluso hacer algo tan complicado como dejar un archivo de resultados en un directorio conocido

Dado que se trata de Linux, probablemente pueda compartir información usando un conducto, pero me pregunto específicamente si hay un módulo compatible con Python y Clojure que facilite la comunicación entre programas.

Gracias.

Respuesta

0

No estoy familiarizado con Clojure, pero probablemente podría conectarlo a json usando el módulo python subprocess.

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) 

o algo como eso ...

5

no estoy seguro de lo que su programa de Clojure está haciendo, pero si usted simplemente está buscando para ejecutar código Clojure desde Python, entonces tal vez entonces Clojure-Py mayo Ayuda:

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

a modo de ejemplo, se puede hacer esto en Python:

>>> import clojure.core 

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

exención de responsabilidad, soy el autor de clojure-py

0

Una opción sería utilizar Jython para ejecutar el código Python en la misma JVM que Clojure - entonces la interoperabilidad sería sustancialmente más fácil.

La interoperabilidad también debe ser independiente del sistema operativo en este caso, lo cual es una buena ventaja.

Ver:

2

Otro enfoque IPC sería el uso de sockets. Creé un servidor de socket muy simple en python que acepta cadenas y llama a una función en él. Luego, la instancia de clojure puede conectarse al servidor python y enviar formularios clojure como datos. Usando pyclj, utilice el pycljreader para convertir los datos clojure en formas pitón, a continuación, procesar, y a continuación, volver datos clojure usando el pycljwriter. Este enfoque es más amigable ya que solo está trabajando con datos de Clojure todo el tiempo.Esto también permite más flexibilidad en donde las instancias python y clojure se están ejecutando, y proporciona una mejor interfaz para comunicación asincrónica.

https://github.com/sunng87/pyclj

Cuestiones relacionadas