2013-10-19 76 views
0

我是Python的新手,開發一個自定義CLI,允許用戶在CLI(從cmd.Cmd模塊派生的自定義CLI模塊)上動態定義函數。自定義命令模塊中的Overriden default()方法將採用用戶輸入的字符串,並且必須執行代碼,無論是動態函數定義還是其他自定義任務。 即我的要求是動態轉換下面CLI代碼成員函數,使用戶能夠執行從CLI函數對象Python - exec從一個字符串中定義一個類的成員函數

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,我可以做字典EXEC func.strip(),EXEC只返回在Python 3.2無。所以,我不知道如何獲得abc()的函數對象,我可以使用setattr將其與類綁定。任何幫助將不勝感激。

回答

相關問題