xmlrpclib ohne HTTP verwenden?

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
wdsl
User
Beiträge: 35
Registriert: Donnerstag 22. Februar 2007, 16:26

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
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.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

BlackJack hat geschrieben:...würde ich aber eher das `pickle`-Modul benutzen.
Aua. :shock: Wenn er das über das Netzwerk nutzen will ist das eine verdammt schlechte idee.
TUFKAB – the user formerly known as blackbird
BlackJack

Warum? Ist auf jeden Fall nicht so aufegbläht wie das XML-RPC-XML und kann auch mehr Datentypen serialisieren.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

blackbird hat geschrieben:
BlackJack hat geschrieben:...würde ich aber eher das `pickle`-Modul benutzen.
Aua. :shock: Wenn er das über das Netzwerk nutzen will ist das eine verdammt schlechte idee.
Was spricht gegen Protokoll 0 oder Protokoll 2.encode("base64")?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
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!? ;-)
wdsl
User
Beiträge: 35
Registriert: Donnerstag 22. Februar 2007, 16:26

naja ich habe mir jetzt ne eigene Transporter klasse geschrieben das geht soweit aber danke für die Hilfe.

mfg
wdsl
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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 :-)
TUFKAB – the user formerly known as blackbird
Mephisto
User
Beiträge: 28
Registriert: Mittwoch 17. Januar 2007, 15:52

Aber nur wenn die gepickelten Daten aus einer nicht vertrauenswürdigen Quelle kommen.

greets meph
Antworten