placid wrote: > On Feb 18, 7:17 pm, "Michele Simionato" <[EMAIL PROTECTED]> > wrote: >> On Feb 17, 11:44 pm, Bjoern Schliessmann <usenet- >> >> >> >> [EMAIL PROTECTED]> wrote: >> > placid wrote: >> > > if i want to treat every cmdloop prompt entry as a potential >> > > command then i need to overwrite the default() method ? >> >> > Excuse me, what's a cmdloop prompt? What's the "default() method"? >> >> > > What i want to achieve is to be able to support global variable >> > > creation for example; >> >> > > res = sum 1 2 >> >> > > this would create a variable res with the result of the method >> > > do_sum() ? >> >> > > then would i be able to run; >> >> > > sum a 5 >> >> > > this would return 8 or an error saying that res is not defined >> >> > Are you sure you're talking about Python here? >> >> Yes, he is talking about the cmd >> module:http://docs.python.org/dev/lib/Cmd-objects.html. However that >> module was never intended as a real interpreter, so defining variables >> as the OP wants would require some work. >> >> Michele Simionato > > How much work does it require ?
Too much. However, here's how far I got: import cmd import shlex DEFAULT_TARGET = "_" def number(arg): for convert in int, float: try: return convert(arg) except ValueError: pass return arg class MyCmd(cmd.Cmd): def __init__(self, *args, **kw): cmd.Cmd.__init__(self, *args, **kw) self.namespace = {} self.target = DEFAULT_TARGET def precmd(self, line): parts = line.split(None, 2) if len(parts) == 3 and parts[1] == "=": self.target = parts[0] return parts[2] self.target = DEFAULT_TARGET return line def resolve(self, arg): args = shlex.split(arg) result = [] for arg in args: try: value = self.namespace[arg] except KeyError: value = number(arg) result.append(value) return result def calc(self, func, arg): try: result = self.namespace[self.target] = func(self.resolve(arg)) except Exception, e: print e else: print result def do_sum(self, arg): self.calc(sum, arg) def do_max(self, arg): self.calc(max, arg) def do_print(self, arg): print " ".join(str(arg) for arg in self.resolve(arg)) def do_values(self, arg): pairs = sorted(self.namespace.iteritems()) print "\n".join("%s = %s" % nv for nv in pairs) def do_EOF(self, arg): return True if __name__ == "__main__": c = MyCmd() c.cmdloop() Peter -- http://mail.python.org/mailman/listinfo/python-list