Seite 1 von 2

Python Kommunikation zwischen 2 PC's

Verfasst: Mittwoch 25. März 2009, 14:05
von bcit6k
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!

Verfasst: Mittwoch 25. März 2009, 14:22
von Leonidas
Am einfachsten: XML-RPC. Da wird der aktuelle Zustand an den XML-RPC Server zugeschickt.

Verfasst: Mittwoch 25. März 2009, 14:28
von bcit6k
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?

Verfasst: Mittwoch 25. März 2009, 14:40
von Leonidas
In der Stdlib ist sowohl ein XML-RPC Server als auch ein Client.

Verfasst: Mittwoch 25. März 2009, 14:46
von bcit6k
cool, danke des werd ich gleich mal testen

Verfasst: Mittwoch 25. März 2009, 15:56
von bcit6k
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

Verfasst: Donnerstag 26. März 2009, 09:51
von alpha
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

Verfasst: Donnerstag 26. März 2009, 10:03
von gerold
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
:-)

Verfasst: Donnerstag 26. März 2009, 11:53
von bcit6k
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?

Verfasst: Donnerstag 26. März 2009, 12:16
von Hyperion
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"?)

Verfasst: Donnerstag 26. März 2009, 13:28
von Leonidas
An dieser Stelle möchte ich erwähnen das RPC ausgeschrieben "Remote Procedure Call" ist und genau dafür da ist, um "Funktionen aufzurufen".

Verfasst: Donnerstag 26. März 2009, 13:34
von bcit6k
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

Verfasst: Donnerstag 26. März 2009, 13:43
von Hyperion
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!)

Verfasst: Donnerstag 26. März 2009, 13:55
von alpha
@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

Verfasst: Donnerstag 26. März 2009, 14:16
von bcit6k
hallo alpha, ja genau so was brauche ich, das werd ich gleich mal antesten ob das auch funkt! danke für die hilfe!

Verfasst: Donnerstag 26. März 2009, 14:19
von gerold
@bcit6k: Windows oder Linux?

Verfasst: Donnerstag 26. März 2009, 14:44
von bcit6k
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

Verfasst: Donnerstag 26. März 2009, 14:45
von bcit6k
windoof

Verfasst: Donnerstag 26. März 2009, 15:14
von Rebecca
An wen soll der Server was senden wenn kein Client verbunden ist? Das geht nicht, egal ob nun XML-RPC oder low level sockets.

Verfasst: Donnerstag 26. März 2009, 15:24
von alpha
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