Seite 1 von 1
xmlrpclib ohne HTTP verwenden?
Verfasst: Sonntag 22. April 2007, 23:40
von wdsl
Hi,
weiß einer wie ich xmlrpclib mit Strings verwenden kann (bzw. mit Pipes aber Strings genügen mir bekomme ich ja bei den Pipes)
vielen Dank
wdsl
Verfasst: Montag 23. April 2007, 09:33
von BlackJack
Du könntest mit den `dumps` und `loads`-Funktionen selbst etwas basteln. Wenn auf beiden Seiten Python läuft, dann würde ich aber eher das `pickle`-Modul benutzen. Oder wenn es sprachunabhängiger sein soll JSON als Zwischenformat.
Verfasst: Montag 23. April 2007, 12:25
von mitsuhiko
BlackJack hat geschrieben:...würde ich aber eher das `pickle`-Modul benutzen.
Aua.

Wenn er das über das Netzwerk nutzen will ist das eine verdammt schlechte idee.
Verfasst: Montag 23. April 2007, 12:50
von BlackJack
Warum? Ist auf jeden Fall nicht so aufegbläht wie das XML-RPC-XML und kann auch mehr Datentypen serialisieren.
Re: xmlrpclib ohne HTTP verwenden?
Verfasst: Montag 23. April 2007, 13:31
von gerold
wdsl hat geschrieben:weiß einer wie ich xmlrpclib mit Strings verwenden kann (bzw. mit Pipes aber Strings genügen mir bekomme ich ja bei den Pipes)
Hi wdsl!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
import xmlrpclib
class MyMethods(object):
def get_hallo(self, name):
return u"Hallo %s" % name
def main():
# Dispatcher vorbereiten und Instanz mit Methoden an Dispatcher binden
dispatcher = SimpleXMLRPCDispatcher()
dispatcher.register_instance(MyMethods())
for i in range(3): # nur zum Testen :-)
# XML-Anfrage erstellen und vom Dispatcher beantworten lassen
xmlcall = xmlrpclib.dumps(("Gerold",), "get_hallo")
xmlretval = dispatcher._marshaled_dispatch(xmlcall)
# XML-Rückgabe parsen und Rückgabe ausgeben
print xmlrpclib.loads(xmlretval)[0][0]
if __name__ == "__main__":
main()
Jetzt musst du die Aufrufe nur noch durch Pipes schleusen und von STDIN annehmen. Z.B. mit ``subprocess`` und ``sys.stdin``.
mfg
Gerold

Verfasst: Montag 23. April 2007, 17:17
von birkenfeld
blackbird hat geschrieben:BlackJack hat geschrieben:...würde ich aber eher das `pickle`-Modul benutzen.
Aua.

Wenn er das über das Netzwerk nutzen will ist das eine verdammt schlechte idee.
Was spricht gegen Protokoll 0 oder Protokoll 2.encode("base64")?
Verfasst: Montag 23. April 2007, 17:30
von BlackJack
Was spricht gegen Protokoll 2 ohne Base64-Kodierung? Können Pipes nur ASCII übertragen? Sitzt da ein kleines Monster das die die höchstwertigen Bits frisst!?

Verfasst: Montag 23. April 2007, 17:59
von wdsl
naja ich habe mir jetzt ne eigene Transporter klasse geschrieben das geht soweit aber danke für die Hilfe.
mfg
wdsl
Verfasst: Dienstag 24. April 2007, 08:41
von mitsuhiko
birkenfeld hat geschrieben:Was spricht gegen Protokoll 0 oder Protokoll 2.encode("base64")?
Ich meinte eher der Sicherheit wegen. Pickle ist jetzt nicht so das hammer sichere Protokoll

Verfasst: Dienstag 24. April 2007, 13:11
von Mephisto
Aber nur wenn die gepickelten Daten aus einer nicht vertrauenswürdigen Quelle kommen.
greets meph