python, xmlrpc - method hivasa valtozobol

ismerkedem a python nyelvvel egy xml-rpc related feladat kapcsan. a kovetkezot probalom megvalositani: egy valtozoban eltarolok egy metodusnevet, amit hivni szeretnek az xml-rpc szerveren, majd ezt a valtozot felhasznalva probalom hivni. kb olyasmi fuggvenyt keresek, mint a php call_user_func fuggvenye.

pelda:

method = 'node.load'
print server.system.method

az utolso sor nyilvan rossz, csak az pelda kedveert irtam igy.

Hozzászólások

Esetleg valami ilyesmi:


class Foo:

    def __init__(self):
        self.foo_xmlrpc = FooXmlRpc()

    def foo(self):
        methodnev = "methodnev"
        method = getattr(self.foo_xmlrpc, methodnev)
        method("valami_attributum_ha_kell")

A getattr, setattr függvényeket nézd meg a dokumentációban. Ide vélhetően jobb, mint az eval.

gyonyoruen mukodik mindkettovel, koszonom a gyors segitseget!

itt kod ha valakit erdekel (xmlrpc terminalt probalgatok irni):


#!/bin/python

import xmlrpclib, readline

serveraddr = 'http://d/5/s/?q=services/xmlrpc
server = xmlrpclib.Server(serveraddr)

while ( 1 ) :
method = raw_input('# ')
m = method.split(' ')
if(m[0] == 'q' or m[0] == 'quit') :
break
if(m[0] == 'help') :
print "Options: \
\n\thelp\tThis help \
\n\tq, quit\tQuit this terminal \
\n\tlist\tList of available methods \
\n\tmh \tLoad help for given method \
\n\tms \tMethod signature for method \
\n\tmc \tLoad "

if m[0] == 'list' :
print server.system.listMethods()
if len(m) > 1 :
if m[0] == 'mh' :
print server.system.methodHelp(m[1])
if m[0] == 'ms' :
print server.system.methodSignature(m[1])
if m[0] == 'mc' :
if m[1] == 'node.load' :
#eval_method = "server." + m[1] + "(" + m[2] + ",[])"
#node = eval(eval_method)
method = getattr(server, m[1])
node = method(int(m[2]), [])
for field in node.keys():
print field, '\t', node[field]