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

xmlrpclib ohne HTTP verwenden?

Beitragvon wdsl » Sonntag 22. April 2007, 23:40

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

Beitragvon BlackJack » Montag 23. April 2007, 09:33

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

Beitragvon mitsuhiko » Montag 23. April 2007, 12:25

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

Beitragvon BlackJack » Montag 23. April 2007, 12:50

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: xmlrpclib ohne HTTP verwenden?

Beitragvon gerold » Montag 23. April 2007, 13:31

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

Beitragvon birkenfeld » Montag 23. April 2007, 17:17

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

Beitragvon BlackJack » Montag 23. April 2007, 17:30

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

Beitragvon wdsl » Montag 23. April 2007, 17:59

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

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

Beitragvon mitsuhiko » Dienstag 24. April 2007, 08:41

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

Beitragvon Mephisto » Dienstag 24. April 2007, 13:11

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

greets meph

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider]