read input for cmd.Cmd from file
Peter Otten
__peter__ at web.de
Fri Jun 3 03:59:11 EDT 2005
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
More information about the Python-list
mailing list