XML-RPC Aufruf Namen und Adresse variabel gestalten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
m.fourb
User
Beiträge: 4
Registriert: Mittwoch 13. Mai 2015, 23:23

Hallo zusammen,

ich stehe momentan vor einem Problem:
Ich würde gerne XML-RPCs nutzen um Funktionen aufzurufen.
Da sich aber die Namen der Funktionen und auch die Adressen im Netzwerk städnig ändern, wäre es ideal, wenn ich mich hierbei (Namen und Adresse) auf Variablen referenzieren könnte.
Gibt es dafür eine Möglichkeit?

Hier kurz ein Code-Beispiel:

Code: Alles auswählen

import xmlrpc.client

s = xmlrpc.client.ServerProxy('http://localhost:8000') #hier müsste die '8000' variabel gestaltet sein

s.function('hello') #hier müssre die Fkt-Bezeichnung 'function' variabel gestaltet wäre
Ideal wäre es, wenn ich beispielsweise eine Integer Zahl und einen String hätte, welche ich dann an den beien Stellen einsetze. Aber ich selbst habe dafür keine Möglichkeit gefunden. Geht sowas?

Vielen Dank im Voraus

VG

M.Fourb
BlackJack

@m.fourb: Was das einsetzen von Werten in Zeichenketten angeht scheinst Du kein Grundlagentutorial durchgearbeitet zu haben. Das sollte eigentlich in jedem brauchbaren vorkommen. Tipp: Zeichenketten haben eine `format()`-Methode.

Für das zweite Problem suchst Du die `getattr()`-Funktion.
m.fourb
User
Beiträge: 4
Registriert: Mittwoch 13. Mai 2015, 23:23

Vielen Dank für die exterm schnelle Antwort.
Und ja, ich habe wirklich noch kein Grundlagentutorial durchgearbeitet, da ich mir Python unvorhergesehen innerhalb der letzen Woche unter Zeitdruck im Rahmen meiner Maschinenbau-Bachelorarbeit selbst beibringen musste. Deshalb hab ich nur immer das nachgeschaut, was ich momentan gerade gebraucht habe.
Das mit der format()-Methode hat schonmal funktioniert, und die getattr()-Funktion schaue ich mir jetzt an und werde dann Feedback geben ;)


VG

M.Fourb
BlackJack

@m.fourb: Wie kann man denn gezielt nachlesen was man braucht wenn man gar nicht weiss was die Sprache einem als Grundwerkzeuge anbietet? Da muss man doch im Grunde schon vorher wissen was man erst nachlesen möchte‽ Ich würde empfehlen das Tutorial in der Dokumentation mal zumindest nebenbei durchzuarbeiten.
m.fourb
User
Beiträge: 4
Registriert: Mittwoch 13. Mai 2015, 23:23

Richtig, ich hab das ganze in C++ umgesetzt und mir dann die entsprechende Syntax für Python gesucht (ging sogar besser als ich es selbst erwartet habe :wink: ). Nur bei den beiden Dingen oben wusste ich nicht weiter. Dass die Adresszuweisung eine Zeichenkette bleibt hätte ich ausprobieren sollen...
Das mit der getattr() Fkt hat super funktioniert, vielen Dank dafür :D
Und ich werde deinen Rat umsetzten und mir schleunigst das Tutorial durcharbneiten, sobald der Stress in der Bachelorarbeit wieder ein bisschen weniger ist.
Danke nochmal.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

m.fourb hat geschrieben:Richtig, ich hab das ganze in C++ umgesetzt und mir dann die entsprechende Syntax für Python gesucht
Wenn Du doch C++ programmieren kannst, dann bleibe doch lieber dabei. Speziell in Deiner Situation scheint die Zeit ein kritischer Faktor zu sein - da bleibt offenbar keine Zeit für das Lernen einer neuen Sprache. Zumal Python ziemlich anders als C++ funktioniert - einfach mal so die Syntax von Python nehmen, aber wie in C++ "denken" funktioniert nicht wirklich gut. Jede Sprache hat neben den grundlegenden Paradigmen ja insbesondere ihre eigenen Idiome und Pattern. Und die lernt man nun mal nicht so eben in kürzester Zeit nebenbei ;-)

Nicht dass ich Dir Python ausreden wollte - ganz im Gegenteil würde ich Dir eher C++ ausreden :twisted: - aber in Anbetracht Deiner Situation erscheint mir das Vorhaben ein wenig gewagt zu sein. (Und wir hatten hier schon ettliche User, die "mal eben schnell" etwas in Python machen mussten wegen einer Abschlussarbeit... das war selten gut!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
m.fourb
User
Beiträge: 4
Registriert: Mittwoch 13. Mai 2015, 23:23

Ich hätte es auch wirklich lieber in C gemacht, aber das Problem ist, dass in C bzw. Windows die Implementierung von XML-RPC noch um einiges aufwendiger ist und ich leider bei Windows bleiben muss, da der Rest des Konzeptes nur darauf funktioniert :(
Deswegen bin ich auf Python umgestiegen, da ich damit nach der BA sowieso in meiner Freizeit arbeiten wollte um ich meine Programmierkenntnisse zu erweitern :)

Dass bei vielen Abschlussarbeiten "mal eben schnell" nichts gutes dabei raus kommt kann ich mir durchaus vorstellen. Ich hoffe, dass hier mein Vorteil ist, dass ich wirklich nur ein ganz kleines System aufbauen muss, das zeigt, dass ich RPC in meinem Konzept verwenden kann.
Nachdem ich jetzt mit der Hilfe von BlackJack meine beiden Probleme lösen konnte, werde ich nur noch ein LAN Netzwerk einrichten, da zwei Rsapberry Pi's hunzufügen und auf denen dann jeweils eine Funktion zur Demonstration per RPC aufrufen (Ich hoffe, dass es so funktioniert, wie ich mir das gedacht habe und mir da nicht noch die Adressierung im Netzwerk über RPC einen Strich durch die Rechnung macht... :? )
Antworten