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