Achim Domma (Procoders) wrote: > I'm writing a simple shell using cmd.Cmd. It would be very usefull if I > could read the commands as batchjob from a file. I've tried the following: > > class MyShell(cmd.Cmd): > def __init__(self,stdin): > cmd.Cmd.__init__(self,stdin=stdin) > ... > ... > > if __name__=='__main__': > if len(sys.argv)==2: > shell=MyShell(file(sys.argv[1])) > else: > shell=MyShell(sys.stdin) > shell.cmdloop() > > Calling 'myshell.py inputfile' with an invalid inputfile, I get an > error, so it seems that the file is opened. But the shell starts as > usuall, ignoring the content of the file. There is no output and no > errors (if I write nonsens into the inputfile).
[While I'm at it, duplicated from de.comp.lang.python] Interesting idea. The simplest approach I found was to feed the file directly into the cmdqueue-Attribute: import cmd class Cmd(cmd.Cmd): def do_this(self, arg): print "this>", arg def do_that(self, arg): print " <that", arg def do_quit(self, arg): print "That's all, folks" return True if __name__ == "__main__": import optparse parser = optparse.OptionParser() parser.add_option("-i", "--interactive", action="store_true") options, args = parser.parse_args() c = Cmd() try: filename, = args except ValueError: pass else: c.cmdqueue.extend(file(filename)) if not options.interactive: c.cmdqueue.append("quit\n") c = c.cmdloop() $ cat batch.txt this that that oops that $ python2.4 batch_cmd.py batch.txt this> <that <that *** Unknown syntax: oops <that That's all, folks If you want to continue the session in the interaktive mode: $ python2.4 batch_cmd.py batch.txt -i this> <that <that *** Unknown syntax: oops <that (Cmd) Peter -- http://mail.python.org/mailman/listinfo/python-list