使用 XMLRPC 在 Python 中进行动态函数调用

Posted

技术标签:

【中文标题】使用 XMLRPC 在 Python 中进行动态函数调用【英文标题】:Dynamic function calls in Python using XMLRPC 【发布时间】:2009-05-23 11:41:19 【问题描述】:

我正在编写一个我打算用来创建子例程的类,构造函数如下:

def __init__(self,menuText,RPC_params,RPC_call):
   #Treat the params
   #Call the given RPC_call with the treated params

问题是我想在模式“rpc.serve.(function name here)(params)”上调用函数, 其中 rpc 是我用来调用 XMLRPC 函数的 serverProxy 对象,而 serve.-function name- 是我在 XMLRPC-server 上调用的方法。

我查看了Calling a function from a string with the function's name in Python,但是看到我的 serverProxy 对象不知道它有哪些“远程属性”,我无法使用 getattr() 函数来检索该方法。

我已经看到了一个通过创建字典来调用给定函数的示例,但是有没有办法像创建字符串一样通过创建函数调用来使函数真正动态化? 就像将字符串作为函数运行一样?

【问题讨论】:

你为什么想要这个模式?为什么不 rpc.functionName(params)? 如果你的意思是我为什么添加“服务”,它只是为了在服务器上对功能进行逻辑分组,没有任何功能。 【参考方案1】:

可以使用getattr从服务器代理获取函数名,所以这样调用函数就可以了:

getattr(rpc, function_name)(*params)

【讨论】:

你是对的!不知道。但是我仍然想知道是否可以在不使用 getattr() 的情况下将给定的字符串作为方法运行。即使我看到使用 getattr() 方法的明显优点。 你可以通过 eval 或 exec 来“运行字符串”,但那将是极其 [脏话删除],在 getattr 中没有任何优势,而且劣势比你能动摇的还要多。跨度>

以上是关于使用 XMLRPC 在 Python 中进行动态函数调用的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTML 输入在 D3 中进行动态过滤

是否可以在 Google Colaboratory 中进行动画可视化?

在 ARKit 中进行动画时如何获取 3D 对象的当前位置?

如何在 Struts 2 中进行动态 URL 重定向?

使用gorm golang在多个表中进行动态列搜索

在CodeIgniter中进行动态路由