回答
做這些類型的任務,最好的方法是使用一個消息代理像RabbitMQ。它提供對Java,Python,PHP等的支持。您可以在使用不同語言實現的過程之間發送消息(例如,或者以任何其他格式的json消息)。 Here你可以找到用不同語言實現的教程。
RabitMQ RabbitMQ是一個消息代理。它位於生產者和消費者之間。生產者是生成消息並將這些消息發佈到RabbitMQ隊列中的組件。 RabbitMQ會根據這些消息以及您定義路線的規則將這些消息傳遞給消費者。消費者是等待接收消息並運行任務的任務運行者。這是一個簡單的生產者,它連接到RabbitMQ,發送一條消息並退出。
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class Send {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws java.io.IOException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
channel.close();
connection.close();
}
}
在這裏,我們有一個簡單的Java消費者,我們保持它運行以偵聽消息。你不僅限於java。您可以使用其中有RabbitMQ的庫(Python和PHP,C#,JavaScript的,等)任何語言:
import com.rabbitmq.client.*;
import java.io.IOException;
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
運行它
$ javac -cp rabbitmq-client.jar Send.java Recv.java
$ java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar Send
$ java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar Recv
注意:你需要rabbitmq-client.jar
和依賴於類路徑。
雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/11747108) – RoadieRich
@RoadieRich謝謝,我更新了我的問題 –
我認爲你的生產者和消費者的原始問題是相反的。 – RoadieRich
這種工藝互連有兩個主要問題:序列化和傳輸。
將數據從Java進程傳遞到Python應用程序時,很可能希望看到特定類型的對象而不是原始字節或文本。有許多框架旨在處理跨語言行爲。看看Apache Avro,Protobuf或Apache Thrift。每個人都有自己的pros and cons。
第二個問題是運輸。像@Mustafa Shujaie已經說過,像RabitMQ這樣的面向消息的傳輸是一個不錯的選擇。但也可以看看Java和Python的REST服務。順便說一句,如果你採用像Protobuf這樣的面向字節的序列化,那麼普通的TCP傳輸可能是一個不錯的選擇 - 與任何像HTTP這樣的應用程序級協議相比,數據開銷將顯着受歡迎。看到這篇文章:python和java。
- 1. 將數據結構從java傳遞給perl(反之亦然)
- 2. 如何將數據從Javascript傳遞到PHP,反之亦然?
- 3. 傳遞指針到C++,反之亦然
- 4. 從ActiveX傳遞字節數組到JavaScript,反之亦然
- 5. 使用JNI將結構從java傳遞到C代碼,反之亦然
- 6. 從傳遞到活動和FragmentDialog反之亦然
- 7. 將數據從自定義視圖傳遞到活動或反之亦然
- 8. 將整數傳遞給int,反之亦然
- 9. 從Python調用Jython(或反之亦然)
- 10. XML到XLSX,反之亦然使用java
- 11. 將文件路徑從片段傳遞到活動,反之亦然
- 12. XAML到Html,反之亦然
- 13. PHP到C#反之亦然
- 14. 這不是如何將PHP值傳遞給JS,反之亦然?
- 15. 如何從JavaScript值傳遞給HTML,反之亦然
- 16. 傳遞一個FORTRAN對象到C,反之亦然
- 17. 如何將數據從js發送到php,反之亦然?
- 18. 如何將數據從JavaScript發送到PHP,反之亦然?
- 19. 將數據從cv :: Mat複製到CvMat並反之亦然
- 20. 使用查詢將數據從SQL Server表傳輸到Excel,反之亦然
- 21. 如何將XML從XML轉換爲Java,反之亦然?
- 22. Hankaku與Zenkaku,反之亦然在Java中
- 23. 傳遞變量/值從PHP到打開窗口過程,反之亦然
- 24. 如何從web視圖數據傳遞給控制器,反之亦然JavaFX中
- 25. 將參數從C#傳遞到Python
- 26. 傳遞結構條目的字符串,反之亦然
- 27. 將列轉換成行,反之亦然
- 28. 將ansi轉換爲utf8,反之亦然
- 29. 將float2轉換爲double2,反之亦然
- 30. 將lonlat轉換爲xyz,反之亦然
so ...你的代碼在哪裏? – haifzhan
你可以把Java程序的輸出寫到標準輸出和從標準輸入讀取的python程序中。或者只是使用TCP套接字。 – Schore
使用tcp ip通信,將java定義爲服務器,將python定義爲客戶端...連接它們並傳輸數據 –