我是 Python 新手,正在开发一个自定义 CLI,它允许用户在 CLI 上动态定义函数(从 cmd.Cmd 模块派生的自定义 CLI 模块)。自定义命令模块中重写的 default() 方法将获取用户输入的字符串,并且必须执行代码,无论是动态函数定义还是其他自定义任务。即我的要求是将以下CLI代码动态转换为成员函数,以便用户可以从Cli对象执行该函数
CLI:>def abc(self):print("New fn")
CLI:>print(cli.abc()) # Cli object pre-created
Output: New fn
默认方法将从 CLI 输入的字符串作为 args 获取。
class CliCmd(cmd.Cmd):
def default(self, func): # func = "def abc(self):print("New fn")"
# Parse for function name
funcName = func.split()[1].split("(")[0]
exec(func)
setattr(self.__class__, funcName, ?) # How do I feed the function object
在较旧的 python 中,我可以在 dict 中执行 exec func.strip(),在 Python 3.2 中 exec 仅返回 None。所以,我不确定如何获取 abc() 的函数对象,我可以反过来使用 setattr 与类绑定。任何帮助将不胜感激。