S
Sarir Khamsi
I have a class (Command) that derives from cmd.Cmd and I want to add
methods to it dynamically. I've added a do_alias() method and it would
be nice if I could turn an alias command into a real method of Command
(that way the user could get help and name completion). The code would
be generated dynamically from what gets passed to the do_alias()
method. I've tried looking in the Python cookbook and have tried:
def funcToMethod(func, clas, method_name=None):
setattr(clas, method_name or func.__name__, func)
class Command(object, cmd.Cmd):
# ...
def do_f1(self, rest): print 'In Command.do_f1()'
def do_alias(self, rest):
rest.strip() # remove leading and trailing whitespace
pat = re.compile(r'^(\w+)\s+(\w+)$')
mo = pat.search(rest)
if mo:
newName = mo.group(1)
existingName = mo.group(2)
code = 'def do_' + newName + '(self, rest):\n'
code += ' self.do_' + existingName + '(rest)\n'
exec code
funcToMethod(getattr(newModule, 'do_' + existingName),
self,
'do_' + 'existingName')
else:
print 'Invalid alias command'
but this does not seem to work. What I get is:
$ importDynamic.py
(Cmd) do alias x f1
*** Unknown syntax: do alias x f1
(Cmd)
Any suggestions? Thanks.
Sarir
methods to it dynamically. I've added a do_alias() method and it would
be nice if I could turn an alias command into a real method of Command
(that way the user could get help and name completion). The code would
be generated dynamically from what gets passed to the do_alias()
method. I've tried looking in the Python cookbook and have tried:
def funcToMethod(func, clas, method_name=None):
setattr(clas, method_name or func.__name__, func)
class Command(object, cmd.Cmd):
# ...
def do_f1(self, rest): print 'In Command.do_f1()'
def do_alias(self, rest):
rest.strip() # remove leading and trailing whitespace
pat = re.compile(r'^(\w+)\s+(\w+)$')
mo = pat.search(rest)
if mo:
newName = mo.group(1)
existingName = mo.group(2)
code = 'def do_' + newName + '(self, rest):\n'
code += ' self.do_' + existingName + '(rest)\n'
exec code
funcToMethod(getattr(newModule, 'do_' + existingName),
self,
'do_' + 'existingName')
else:
print 'Invalid alias command'
but this does not seem to work. What I get is:
$ importDynamic.py
(Cmd) do alias x f1
*** Unknown syntax: do alias x f1
(Cmd)
Any suggestions? Thanks.
Sarir