On Wednesday, April 2, 2014 4:33:07 PM UTC-7, Jason Swails wrote: > From there, you can implement a method interface in which the child Cmd > subclasses can call to indicate to BossCmd that do_exit has been called and > it should quit after the child's cmdloop returns. So something like this: > >
Hey, yeah. My previous responses didn't show up, or are delayed, or something. Thank you, yes. This advice helped and rooting around the source code I realized that the Cmd.cmdqueue attribute is the easy way out: import cmd class BossCmd(cmd.Cmd): def __init__(self): cmd.Cmd.__init__(self) self.prompt = 'Boss>' self.exit_called_from_minion = False self.minions = {} def add_minion(self, name, cmder): self.minions[name] = cmder def do_exit(self, line): return True def postloop(self): print "I mean it. I'm done" def postcmd(self, stop, line): # check if minion called for exit if self.exit_called_from_minion: stop = True return stop def do_submission(self, line): if line: self.minions['submission'].onecmd(line) else: self.minions['submission'].cmdloop() def do_story(self, line): if line: self.minions['story'].onecmd(line) else: self.minions['story'].cmdloop() class SubmissionCmd(cmd.Cmd): def __init__(self, master = None): cmd.Cmd.__init__(self) self.prompt = 'Submission>' self.master = master if self.master: self.master.add_minion('submission', self) def do_done(self, line): return True def do_exit(self, line): self.master.exit_called_from_minion = True return True def do_story(self, line): if line: self.master.minions['story'].onecmd(line) else: self.master.cmdqueue.append('story {}'.format(line)) return True class StoryCmd(cmd.Cmd): def __init__(self, master=None): cmd.Cmd.__init__(self) self.prompt = 'Story>' self.master=master if self.master: self.master.add_minion('story', self) def do_done(self, line): return True def do_exit(self, line): elf.master.exit_called_from_minion = True return True def do_submission(self, line): if line: self.master.minions['submission'].onecmd(line) else: self.master.cmdqueue.append('submission {}'.format(line)) return True Boss = BossCmd() Sub = SubmissionCmd(Boss) Story = StoryCmd(Boss) Boss.cmdloop() ---- This gives me a flexible framework to bounce between Cmd instances at will, and quit the program from anywhere. Josh -- https://mail.python.org/mailman/listinfo/python-list