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

Reply via email to