Der beste Weg, diese Art von Aufgaben zu tun ist, einen Nachrichten-Broker wie RabbitMQ zu verwenden. Es bietet Unterstützung für Java, Python, PHP usw. Sie können Nachrichten (z. B. eine json-Nachricht oder in einem anderen Format) zwischen Prozessen senden, die mit verschiedenen Sprachen implementiert wurden. Here können Sie Tutorials finden, die in verschiedenen Sprachen implementiert sind.
RabitMQ RabbitMQ ist ein Nachrichten-Broker. Es sitzt zwischen Produzenten und Konsumenten. Hersteller sind Komponenten, die Nachrichten produzieren und diese Nachrichten in einer Warteschlange in RabbitMQ veröffentlichen. RabbitMQ nimmt diese Nachrichten und nach den Regeln, die Sie definiert haben, Routen und liefert diese Nachrichten an die Verbraucher. Verbraucher sind Aufgabenläufer, die darauf warten, Nachrichten zu empfangen und Aufgaben auszuführen. Hier ist ein einfacher Produzent, der sich mit RabbitMQ verbindet, eine einzelne Nachricht sendet und beendet.
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();
}
}
Und hier haben wir eine einfache Java-Verbraucher, die wir halten es läuft für Nachrichten abzuhören. Sie sind nicht auf Java beschränkt. Sie können eine beliebige Sprache benutzen, die es RabbitMQ Bibliotheken für (Python, PHP, C#, JavaScript, etc.):
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);
}
}
es auszuführen:
$ 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
Hinweis: Sie rabbitmq-client.jar
benötigen und ihre Abhängigkeiten vom Klassenpfad.
so ... wo ist dein Code? – haifzhan
Sie könnten die Ausgabe des Java-Programms auf stdout schreiben und im Python-Programm von stdin lesen. Oder benutze einfach TCP-Sockets. – Schore
Verwenden Sie eine TCP IP-Kommunikation, definieren Sie die Java als Server und die Python als Client ... verbinden sie und übertragen Daten –