2012-07-25 37 views
5

Tôi có hai câu hỏi, một câu hỏi của tập hợp con kia.Cách đơn giản nhất cho các chương trình Clojure và Python để chia sẻ thông tin là gì?

1) Cách tốt nhất để truyền thông tin giữa chương trình Python và Clojure là gì. Câu hỏi đó cũng có thể được mở rộng sang bất kỳ ngôn ngữ jvm nào như Scala. Các chương trình này sẽ chạy dưới Linux.

2) Cách tốt nhất để thực hiện việc này trong Windows là gì?

Chi tiết như sau. Tôi muốn một chương trình Python để khởi động một chương trình Clojure, biết khi chương trình Clojure đã hoàn thành, và lấy kết quả chạy chương trình Clojure.

Tôi biết rằng giữa chương trình Python và Clojure, thông tin có thể được chia sẻ trong bảng cơ sở dữ liệu được tạo riêng cho mục đích gửi thông tin khi chương trình Clojure hoàn thành hoặc thậm chí thực hiện điều gì đó như một tập tin kết quả thư mục đã biết. Vì đây là Linux, tôi có thể chia sẻ thông tin bằng cách sử dụng một đường ống, nhưng tôi đặc biệt tự hỏi liệu có một mô-đun được hỗ trợ bởi cả Python và Clojure có thể tạo điều kiện liên lạc giữa các chương trình hay không.

Cảm ơn bạn.

Trả lời

0

Tôi không quen thuộc với Clojure, nhưng có thể bạn đã sử dụng mô-đun 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) 

hoặc somthing như thế ...

5

Tôi không chắc chắn những gì chương trình Clojure bạn đang làm, nhưng nếu bạn chỉ đơn giản là tìm cách để thực thi mã Clojure từ Python, thì có lẽ sau đó Clojure-Py thể giúp đỡ:

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

Như một ví dụ, bạn có thể làm điều này bằng Python:

>>> import clojure.core 

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

Tuyên bố từ chối trách nhiệm, tôi là tác giả của clojure-py

0

Một tùy chọn sẽ là sử dụng Jython để chạy mã Python của bạn trong cùng một JVM như Clojure - sau đó tương tác sẽ dễ dàng hơn nhiều.

Interop cũng phải là hệ điều hành độc lập trong trường hợp này, đây là phần thưởng tốt đẹp.

Xem:

2

Một cách tiếp cận IPC sẽ được sử dụng ổ cắm. Tôi tạo ra một máy chủ socket rất đơn giản trên python chấp nhận các chuỗi và gọi một hàm trên nó. Sau đó, thể hiện clojure có thể kết nối với máy chủ python và gửi các biểu mẫu clojure trên dữ liệu. Sử dụng pyclj, sử dụng pycljreader để biến dữ liệu thành các dạng clojure trăn, sau đó xử lý nó, và sau đó trở lại dữ liệu clojure sử dụng pycljwriter. Cách tiếp cận này thân thiện hơn khi bạn chỉ làm việc với dữ liệu clojure mọi lúc.Điều này cũng cho phép linh hoạt hơn ở nơi các cá thể python và clojure đang chạy, và cung cấp một giao diện tốt hơn cho truyền thông không đồng bộ.

https://github.com/sunng87/pyclj

Các vấn đề liên quan