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.
- 743 megtekintés
Hozzászólások
feladattol fuggoen pl. exec/eval
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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]
- A hozzászóláshoz be kell jelentkezni