Java Anfrage zu Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
krautbert
User
Beiträge: 15
Registriert: Mittwoch 14. August 2013, 20:48

Hi Leute,

ich frage mich gerade wie ich das bewerkstelligen soll, dass ein Python Programm auf eine Java Anfrage antwortet.
Bedeutet, dass ich ein Python Programm habe, das auf Port X hört. Kommt dort eine Anfrage von einer Java Applikation auf diesen Port soll er was mit dieser Anfrage anfangen können. Gibt es da ne Bibliothek damit Python Java Code versteht?
Oder einen anderen Trick?

Grüße
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Hi krautbert,
was soll das sein eine 'Java-Anfrage'? Damit zwei Prozesse miteinander kommunizieren können, müssen beide ein bestimmtes Protokoll, dabei ist es egal, in welcher Programmiersprache dieses Protokoll implementiert wird.
Ist ein Protokoll vorgegeben? Wenn ja welches? Wenn nein, welche Anforderungen gibt es an die Kommunikation?
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

krautbert hat geschrieben:ich frage mich gerade wie ich das bewerkstelligen soll, dass ein Python Programm auf eine Java Anfrage antwortet.
Bedeutet, dass ich ein Python Programm habe, das auf Port X hört. Kommt dort eine Anfrage von einer Java Applikation auf diesen Port soll er was mit dieser Anfrage anfangen können. Gibt es da ne Bibliothek damit Python Java Code versteht?
Bist du sicher, dass du weißt wovon du redest?

Im Netz kommunizieren ständig viele in unterschiedlichen Sprachen geschriebenen Programme auf irgendwelchen Ports miteinander. Dafür gibt es dann bestimmte Protokolle auf die man sich geeinigt hat. Der Datenaustausch erfolgt dann in einem in dem jeweiligen Protokoll definierten Format. Code wird da nicht durch die Gegend geschickt. Meinst du dein Webbrowser führt C-Code aus, weil der Webserver am anderen Ende in C geschrieben ist?
krautbert
User
Beiträge: 15
Registriert: Mittwoch 14. August 2013, 20:48

Uih, da schäme ich mich aber!
Klar, Ihr habt recht. Ich habe einfach viel zu kompiliziert gedacht!
Sorry! :)
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wenn wir schon beim zu komplizierten Denken sind: Muss es wirklich über einen Port laufen? Ansonsten könntest du dir nämlich mal Jython angucken. Damit kann man Java-Klassen als Python-Module importieren und dann mit ganz normaler Python-Syntax als Schnittstelle zwischen beiden Welten arbeiten. Du könntest die Java-Anfragen dann dementsprechend über eine Art Zwischenschicht an die Python-Bibliothek weitervermitteln und dort natürlich auch die Rückgabewerte für deine Aufrufe erhalten.
Benutzeravatar
imho74
User
Beiträge: 11
Registriert: Sonntag 15. Juni 2008, 21:49

Ich hatte gerade an soetwas wie POST aus dem HTTP gedacht (hatte ich mal bei stackoverflow.com gesehen). Man könnte Python verwenden, um Daten zu senden, z.B. einen Webserver:

Code: Alles auswählen

import urllib2, urllib
mydata = [('one','1')]    #The first is the var name the second is the value
mydata = urllib.urlencode(mydata)
path = 'http://localhost/new.php'    #The URL you want to POST to
req = urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
page = urllib2.urlopen(req).read()
print page
PHP könnte die Daten dann in eine Datei schreiben:

Code: Alles auswählen

<?php
    $file = "path/to/file/here" ;
    file_put_contents($file, $_POST['one'], FILE_APPEND | LOCK_EX);
?>
Und das Java-Programm könnte die Daten dann aus der Datei wieder herausholen... Nur so als Idee.
BlackJack

@imho74: Wie kommt denn da jetzt PHP mit ins Spiel? Die Frage war wie man von Java aus eine Anfrage an ein Python-Programm stellen kann. Klar kann man das auch über HTTP machen, dann müsste man aber in Python keinen Webserver befragen, also einen Client schreiben, sondern einen Webserver. Was mit der Standardbibliothek nicht allzu schwer ist, weil es dort schon einen gibt. HTTP ist aber eventuell nicht so gut geeignet. Würde ich eigentlich nur nehmen wenn grosse Dateien/Datenmengen als Antwort auf einfache Anfragen gestreamt werden sollen. Sonst eher so etwas wie JSON-RPC oder XML-RPC.
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde die PHP-Anwendung das Ganze ja noch in XML übersetzen lassen und es dann an Java weiterreichen... 8)
Benutzeravatar
imho74
User
Beiträge: 11
Registriert: Sonntag 15. Juni 2008, 21:49

BlackJack hat geschrieben:@imho74: Wie kommt denn da jetzt PHP mit ins Spiel?
Weil ich kein Java kann. 8)

Es war jetzt ja auch nur eine von vielen Möglichkeiten. Man weiß ja nicht genau, was krautbert erreichen möchte.
krautbert
User
Beiträge: 15
Registriert: Mittwoch 14. August 2013, 20:48

snafu hat geschrieben:Wenn wir schon beim zu komplizierten Denken sind: Muss es wirklich über einen Port laufen? Ansonsten könntest du dir nämlich mal Jython angucken. Damit kann man Java-Klassen als Python-Module importieren und dann mit ganz normaler Python-Syntax als Schnittstelle zwischen beiden Welten arbeiten. Du könntest die Java-Anfragen dann dementsprechend über eine Art Zwischenschicht an die Python-Bibliothek weitervermitteln und dort natürlich auch die Rückgabewerte für deine Aufrufe erhalten.
Vorab, danke für die Antwort.
Ich habe vor eine Android-APP schreiben zu lassen. Die APP soll sich Daten von einer MySQL DB aholen. Mir wurde zugetragen, dass sich Android-Java nicht mit MySQL versteht und man einen Zwischenschritt einlegen soll. Da dachte ich, dass die App Anfragen an einen Port vom (ich nenne ihm jetzt mal) Python-Server schickt und der Server die Anfrage umgewandelt und an die MySQL DB weiterleitet. Die DB antwortet dem Server und der wiederum gibt es weiter an die APP. Sinnvoll? Verbesserungsvorschläge? :)

Port auch aus Sicherheitsgründen (Firewall).

Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

krautbert hat geschrieben:Mir wurde zugetragen, dass sich Android-Java nicht mit MySQL versteht und man einen Zwischenschritt einlegen soll.
Das würde ich so nicht sagen. Der Punkt ist dass man keine Datenbank direkt am Internet hängen haben will weil dann Leute ggf. beliebigen Unfug mit den Daten machen können.
krautbert hat geschrieben:Da dachte ich, dass die App Anfragen an einen Port vom (ich nenne ihm jetzt mal) Python-Server schickt und der Server die Anfrage umgewandelt und an die MySQL DB weiterleitet. Die DB antwortet dem Server und der wiederum gibt es weiter an die APP. Sinnvoll? Verbesserungsvorschläge? :)
Okay, das macht die Sache klarer. Was du suchst ist eine REST-API, am besten mit JSON als Ausgabeformat Geht mit Python ganz einfach.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten