Seite 1 von 1

XMLRPC Server und print

Verfasst: Dienstag 10. Juni 2008, 16:40
von Andyh
Hallo

So wies aussieht stehe ich mal wieder voll aufm Schlauch.

Server:

Code: Alles auswählen

#!/usr/bin/env python 
# -*- coding: iso-8859-15 -*- 
""" 
Einfacher XMLRPC-Server 
""" 

from SimpleXMLRPCServer import SimpleXMLRPCServer 
from random import randint 

class XmlrpcHandler: 
    def get_random_int(self, from_int, to_int): 
        return randint(from_int, to_int)

    def test(self, text):
        print text
        return text

server = SimpleXMLRPCServer(("localhost", 50505)) 
server.register_instance(XmlrpcHandler()) 
print "Der XMLRPC-Server horcht auf http://localhost:50505." 
print "Er kann mit STRG+C beendet werden." 
server.serve_forever()
Wenn ich jetzt:
s = xmlrpclib.ServerProxy("http://localhost:50505")
s.test("HALLO") eingeben, bekomme ich:

Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
s.test("HALLO")
File "C:\Python25\lib\xmlrpclib.py", line 1147, in __call__
return self.__send(self.__name, args)
File "C:\Python25\lib\xmlrpclib.py", line 1437, in __request
verbose=self.__verbose
File "C:\Python25\lib\xmlrpclib.py", line 1201, in request
return self._parse_response(h.getfile(), sock)
File "C:\Python25\lib\xmlrpclib.py", line 1340, in _parse_response
return u.close()
File "C:\Python25\lib\xmlrpclib.py", line 787, in close
raise Fault(**self._stack[0])
Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal None unless allow_none is enabled">

Das hängt ja unmittelbar mit dem "print" zusammen. Ich wahr aber den meinung das es schonmal gegangen ist. Komisch ist auch das der Server "HALLO" ausgibt ohne zu mekern.

Was habe ich jetzt falsch gemacht (ist wahrscheinlich wieder so einfach wie gestern :oops: )

Gruß
Andyh

Verfasst: Dienstag 10. Juni 2008, 16:44
von EyDu
Ich hab' gar keine Ahnung, aber rete mal vollkommen ins Blaue :roll: : Ist es vielleicht notwendig, dass die "test"-Methode irgend etwas zurückgibt, so wie es "get_random_int" auch tut?

Verfasst: Dienstag 10. Juni 2008, 16:46
von Trundle
Es darf kein ``None`` zurückgegeben werden, es sei denn, du übergibst beim Instanziieren des Servers den ``allow_none``-Parameter.

Also einfach

Code: Alles auswählen

server = SimpleXMLRPCServer(("localhost", 50505), allow_none=True)
Edit: Allerdings dürfte der Fehler mit dem angegeben Code natürlich gar nicht auftreten.

Verfasst: Dienstag 10. Juni 2008, 16:54
von Leonidas
Wenn man Kompatibilität beibehalten will, sollte man wohl von ``allow_none`` die Finger lassen, denn das ist eine Erweiterung die nicht jeder Client unterstützen muss.

Verfasst: Dienstag 10. Juni 2008, 17:00
von Trundle
Stimmt, aber ich ging einfach mal davon aus, dass es ein Py-only Projekt ist.

Verfasst: Dienstag 10. Juni 2008, 17:02
von Andyh
Hallo

Das problem ist nach einen neustart weg.

Ich habe doch den text mit return zurückgegeben.

allow_none=True

werde ich mir schonmal merken

Danke!

Gruß
Andyh