Python Kommunikation zwischen 2 PC's

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

Hallo liebes Forum,

ich möchte gerne ein Programm umsetzen und weis aber noch nicht wie. Ich bräuchte nur einen Tipp mit was man das am besten machen könnte.

PC1

auf PC1 läuft ein Normales Python Skript in einem DOS Fenster. Dieses Skript Arbeitet eine Liste ab. Das Skript gibt den Status des Programms aus ca 100 mal pro sek.

PC2

mit diesem PC will ich nun den gleichen Status sehen wie auf PC1. so eine art remote desktop. im grunde würd es reichen wenn ich mein skript auf PC1 anfunken könnte und mir die Daten übergeben werden.

Hat jemand eine Idee wie man das am besten machen kann?

Danke!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Am einfachsten: XML-RPC. Da wird der aktuelle Zustand an den XML-RPC Server zugeschickt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

d.h. auf einem pc läuft ein server und der andere is der client, muss ich da extra einen server installieren? oder is des einfach ein modul in python?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In der Stdlib ist sowohl ein XML-RPC Server als auch ein Client.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

cool, danke des werd ich gleich mal testen
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

ich hab das nun mal getestet das is schon nicht so schlecht das ich da gefunden hab,

http://code.activestate.com/recipes/81549/

für all die die da auch intresse haben
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Hallo,

mir ist nicht ganz klar wieso man dafür XML-RPC braucht. Mach doch einfach ne Socketkommunikation auf und schick die Strings da drüber. Dürfte auch viel schneller sein.

Gruß
alpha
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

alpha hat geschrieben:mir ist nicht ganz klar wieso man dafür XML-RPC braucht. Mach doch einfach ne Socketkommunikation auf und schick die Strings da drüber. Dürfte auch viel schneller sein.
Hallo alpha!

Natürlich ist eine reine Socketkommunikation schneller. Aber dafür musst du dir **alles** selber programmieren. Für XMLRPC gibt es in Python Highlevel-Module, die sich um alles kümmern. Du kannst über XMLRPC direkt Funktionen des Servers aufrufen. Der Client wartet, bis die Funktion am Server abgearbeitet wurde und empfängt das Ergebnis. Und das mit nur wenigen Codezeilen, und ohne dass du wissen musst, wie das übertragen wird. Usw.

XMLRPC ist highlevel. Socket ist lowlevel. Es gibt keinen Grund, alles selber zu programmieren, wenn nur mal ein paar Daten übertragen werden müssen. Wenn es nicht auf Geschwindigkeit ankommt.

Kleines XMLRPC-Beispiel: http://www.python-forum.de/topic-5478.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

ich hab mir das inzwischen ein wenig angschaut und ich glaub das socket das richtige für mich ist. ich möcht ja eine funktion in python starten und am client das ergebniss sehen.

eine frage noch, wenn ich mich weg connecte vom server, bleibt dann auch der prozess stehen? und wenn ich michzurück connecte, sehe ich diesen dann wieder?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

bcit6k hat geschrieben:ich hab mir das inzwischen ein wenig angschaut und ich glaub das socket das richtige für mich ist. ich möcht ja eine funktion in python starten und am client das ergebniss sehen.
Ja und wieso spricht das dann gegen xml-rpc?
eine frage noch, wenn ich mich weg connecte vom server, bleibt dann auch der prozess stehen? und wenn ich michzurück connecte, sehe ich diesen dann wieder?
Das musst Du dann selber implementieren. (Was genau meinst Du mit "prozess"?)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

An dieser Stelle möchte ich erwähnen das RPC ausgeschrieben "Remote Procedure Call" ist und genau dafür da ist, um "Funktionen aufzurufen".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

normalerweise rufe ich auf einem pc ein pythin skript auf das mehrere stunden (tage) läuft. ich gebe mir den akzuellen status immer mit print aus. so weit ist das ja ganz ok. nur wenn ich sehen will wie weit das skript ist muss ich mich erst per remote auf den jeweiligen pc einklinken und nachschaun.

besser währe es wenn ich mich nur mit python verbinden kann und die aktuellen statusmeldungen des skripts zurück bekomme

so was schwebt mir vor
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

bcit6k hat geschrieben:normalerweise rufe ich auf einem pc ein pythin skript auf das mehrere stunden (tage) läuft. ich gebe mir den akzuellen status immer mit print aus. so weit ist das ja ganz ok. nur wenn ich sehen will wie weit das skript ist muss ich mich erst per remote auf den jeweiligen pc einklinken und nachschaun.
Dann lasse dir doch die Ergegnisse zumailen? Oder erstelle eine Webseite, und lasse sie Dir dann ausliefern.
besser währe es wenn ich mich nur mit python verbinden kann und die aktuellen statusmeldungen des skripts zurück bekomme
Ja aber genau das kannst Du doch per rpc-xml auch tun! Wo ist da der Vorteil von low-Level socket-Programmierung? Natürlich brauchst Du eine Strategie, wie Du die Kommunikation zwischen Server und dem lange laufenden Script realisierst - aber das muss man sowieso klären (außer bei den oben genannten Alternativen!)
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

@Gerold:
So wie ich bcit6k verstanden habe möchte er das was er mit print("irgendwas") auf der Konsole ausgibt mit auf nen anderen PC schicken.
Das liese sich ja schon fast mit dem in der Python Dokumentation vorhandenen Beispiel erschlagen. Zumal so wie ich es verstanden habe nur um einen Client handelt der sich auf den Server verbindet.

Ich würde das schematisch so machen.
Socketserver in bestehendes Programm einbinden (das bis jetzt den Status auf dem schirm ausgibt)
mit socketclient auf socketserver verbinden
Wenn Server Verbindung erkennt über
connection.send("teststring") - Methode Ausgaben an Client schicken

Hoffe ich habs richtig verstanden.
Grüße
alpha
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

hallo alpha, ja genau so was brauche ich, das werd ich gleich mal antesten ob das auch funkt! danke für die hilfe!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

@bcit6k: Windows oder Linux?
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

jetzt hab ich doch noch eine frage.

mir ist jetzt so weit klar das der server ,wenn der client connectedist ihm auch die ausgabe zusendet. aber bei mir wartet der server immer bis sich ein client verbindet, ich möchte das er einfach sendet ohne darauf zu warten das sich ein client connected, aber wie des weis ich nicht
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

windoof
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

An wen soll der Server was senden wenn kein Client verbunden ist? Das geht nicht, egal ob nun XML-RPC oder low level sockets.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Du hast jetzt wohl sowas:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

und Dein Server kommt über das listen nicht hinaus. Da mußt die wohl
den Kommunikationsteil in einen eigenen Thread packen. Schau dir mal das
Modul "threading" an.

Gruß
alpha
Antworten