XMLRPC Server und print

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

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
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Stimmt, aber ich ging einfach mal davon aus, dass es ein Py-only Projekt ist.
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

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
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Antworten