python变量函数定义

时间:2011-02-04 23:54:29

标签: python eval

首先,如果已经被问过,请不要开枪 - 我环顾四周但无济于事。

我有一个python文件(名为rpc.py),其中包含许多为AJAX请求提供服务的函数。例如:

def test(self, vars):
    return vars['id']

def test2(self, vars):
    return vars['id']+1

使用以下网址调用它:

rpc.py?fnc=test2&id=4

我想调用与'fnc'查询参数匹配的函数,并将整个查询字符串传递给'vars'

所以类似下面的“伪代码”就是我所追求的:

vars = cgi.FieldStorage()
print "Content-Type: text/html\n\n"
print eval('vars["fnc"].value(vars)')

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您可以使用

getattr(server, vars["fnc"])(vars)

但我还建议在服务名称中添加前缀(例如“do_test”),以避免恶意代码只需传递其名称(包括您认为的名称)即可调用服务器对象的任何方法它不应该)。在这种情况下,它将是

getattr(server, "do_" + vars["fnc"])(vars)