Python et la création d’un interpréteur¶
Il est souvent utile de créer des outils en ligne de commande du type interpréteur.
Un interpréteur va plus loin qu’une simple ligne de commande dans le sens où il n’y a pas de scénario pré-établie.
Python comporte son propre interpréteur (à lancer en ligne de commande par python) et on peut utiliser ce dernier pour créer sont interpréteur.
import cmd
import string, sys
class CLI(cmd.Cmd):
def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = '> '
def do_hello(self, arg):
print "hello again", arg, "!"
def help_hello(self):
print "syntax: hello [message]",
print "-- prints a hello message"
def do_quit(self, arg):
sys.exit(1)
def help_quit(self):
print "syntax: quit",
print "-- terminates the application"
#integre function et help
def do_greet(self, person):
"""greet [person]
Greet the named person"""
print person
#ne fait rien si ligne vide
def emptyline(self):
pass
# shortcuts
do_q = do_quit
#
# try it out
cli = CLI()
cli.cmdloop()
ce qui donne
$ python cmd-example-1.py
> help
Documented commands (type help <topic>):
========================================
hello quit
Undocumented commands:
======================
help q
> hello world
hello again world !
> q
Note
cet interpréteur comporte déjà la gestion des aides, historiques, ...
Une documentation complète sur cette classe est disponible sur le lien http://docs.python.org/library/cmd.html
Il est aussi possible d’utiliser un interpréteur avec une ligne de commande (mode “une commande”)
import cmd
class InteractiveOrCommandLine(cmd.Cmd):
"""Accepts commands via the normal interactive prompt or on the command line."""
def do_greet(self, line):
print 'hello,', line
def do_EOF(self, line):
return True
if __name__ == '__main__':
import sys
if len(sys.argv) > 1:
InteractiveOrCommandLine().onecmd(' '.join(sys.argv[1:]))
else:
InteractiveOrCommandLine().cmdloop()