SimpleXMLRPCServer problema enigmatico

Joaquin Jose del Cerro Murciano jjdelcerromurciano en yahoo.es
Jue Sep 1 09:38:50 CEST 2005


El Miércoles, 31 de Agosto de 2005 16:35, Paco Moreno escribió:
> El Miércoles 31 Agosto 2005 11:25, Paco Moreno escribió:
> > Estoy con la cabeza caliente porque no se por qué falla la siguiente
> > petición xmlrpc:
> > "error":
> > Traceback (most recent call last):
> >   File "iclient.py", line 57, in refresca_hebra
> >     b = self.server.memoria()
> >   File "/usr/lib/python2.4/xmlrpclib.py", line 1096, in __call__
> >     return self.__send(self.__name, args)
> >   File "/usr/lib/python2.4/xmlrpclib.py", line 1383, in __request
> >     verbose=self.__verbose
> >   File "/usr/lib/python2.4/xmlrpclib.py", line 1147, in request
> >     return self._parse_response(h.getfile(), sock)
> >   File "/usr/lib/python2.4/xmlrpclib.py", line 1286, in _parse_response
> >     return u.close()
> >   File "/usr/lib/python2.4/xmlrpclib.py", line 744, in close
> >     raise Fault(**self._stack[0])
> > xmlrpclib.Fault: <Fault 1: 'exceptions.TypeError:function takes at least
> > 2 arguments (1 given)'>
> >
> > "codigo servidor":
> > from SimpleXMLRPCServer import *
> >
> > class sesiones:
> >     def __init__(self):
> >         print "Instanciacion de sesiones"
> >
> >     def datos_iniciales(self):
> >     #devuelve una lista: espacio a, espacio b,mem_total, swap_total
> >         a = os.open('/proc/meminfo')
> >         sal = a.read()
> >         lista = sal.split()
> >         return [lista[4],lista[7],lista[1],lista[13]] #revisar
> >
> >     def espacio_2(self):
> >     #devuelve lista de 2 elementos: a:ocupado,b:ocupado en  en %
> >         a,b = os.popen2('df / -h')
> >         sal = b.read()
> >         b.close()
> >         lista1 = sal.split()
> >         a,b = os.popen2('df /dev/hda1 -h')
> >         sal = b.read()
> >         b.close()
> >         lista2 = sal.split()
> >         return [lista1[11][0:-1],lista2[11][0:-1]]
>
>  def memoria(self):
>          #devuelve una lista de elementos: libre, cached,
> buffered,swap_cached en kb
>          a = os.open('/proc/meminfo')
>          sal = a.read()
>          lista = sal.split()
>          return [lista[4],lista[7],lista[10],lista[13]]
>

---------------------------------------------
>>> import os
>>> help(os.open)





Help on built-in function open in module posix:

open(...)
    open(filename, flag [, mode=0777]) -> fd

    Open a file (for low level IO).


------------------------------------------------

Un consejo que te alivia muchas veces con XMLRPC, cuando crees una funcion que 
esportas por XMLRPC atrapa las exceptciones, has un print del error, si 
puedes haz un print del stack, y luego relanza la excepcion.

Asi podras ver mejor los errores y separar lo que tiene que ver con XMLRPC de 
lo que le pasa a tu codigo.


> > class servidor:
> >     """Clase principal del servidor."""
> >     configuraciones = {'puerto':6051,
> > 'version_cliente':0.1,'version_server':0.1}
> >
> >     def __init__(self):
> >         self.server = SimpleXMLRPCServer(("",
> > self.configuraciones['puerto']))
> > self.server.register_instance(sesiones())
> > self.server.register_introspection_functions( )
> >
> >     def run(self):
> >         self.server.serve_forever()
> >
> > "cliente":
> > class iclient:
> >     TIME_UPDATE = 200
> >     def __init__(self):
> >         self.x = gtk.glade.XML('gui.glade')
> >         self.x.signal_autoconnect(self)
> >         self.server = ServerProxy("http://localhost:6051")
> >         print self.server.system.listMethods()
> >         self.hebra = gobject.timeout_add(self.TIME_UPDATE,
> > self.refresca_hebra)
> >
> >     def refresca_hebra(self):
> >         a = self.server.espacio_2()      <--------   Lo ejecuta bien
> >         self.x.get_widget('progressbar11').set_fraction(float(a[0])/100)
> >         self.x.get_widget('progressbar12').set_fraction(float(a[1])/100)
> >         b = self.server.memoria()         <--------   da el error de
> > arriba return 1
> >
> > ¿por qué? si alguien me lo puede decir muchas gracias porque por más que
> > le doy vueltas está bien, a lo mejor se me escapa algún detalle de xmlrpc
> > que no sepa(es la primera vez que hago una aplicación de este tipo).
>
> Lo siento, por recortar código se me pasó

		
______________________________________________ 
Renovamos el Correo Yahoo! 
Nuevos servicios, más seguridad 
http://correo.yahoo.es




Más información sobre la lista de distribución Python-es