Interactions avec l’utilisateur

les prompts

raw_input ou input

(raw_input renvoie une string, input essayes d’évaluer, soyez prudent…)

>>> from subprocess import call
>>> filename = input("quel fichier voulez-vous afficher ?\n")
>>> call("cat " + filename, shell=True)

le module cmd et les interpréteurs

le monde des interpréteur ligne de commande…

Peu après l’âge de bronze vint le temps de l’interpréteur ligne de commande, c’est-à-dire quelque chose de plus spécifique que l’application ligne de commande, ou que l’utilitaire ligne de commande.

Un interpréteur ligne de commande est un programme qui :

  • est forcément plein texte
  • vous donne un prompt
  • prends toutes ses entrées d’un coup
  • produit une sortie (typiquement des lignes de texte)
  • vous redonne un prompt

Le shell unix est un bon exemple d’interpréteur ligne de commande.

Un utilitaire ligne de commande est un programme unix-like qui prend toutes les entrées d’un coup, et qui vous renvoie une sortie d’un coup.

le module cmd : exemple d’utilisation

#!/usr/bin/env python
# -*- coding: utf8 -*-
"""Command line interpreter
"""
import cmd

# ____________________________________________________________
# this Cli is a model of a basic use of a simple cmd
class Cli(cmd.Cmd):
    def __init__(self):
        cmd.Cmd.__init__(self)
        self.doc_header = "Documented commands (type help <command>):"
        self.undoc_header = "Undocumented commands"
        self.prompt = "#Prompt> "
        self.intro  = """cli (command line interpreter)
(type help or ? for commands list)"""
        self.ruler = "-"
        
    def emptyline(self):
        print "Type 'exit' to finish withe the session or type ? for help."

    def default(self, line):
        print "unknown command prefix" 
        print "*** unknown syntax : %s (type 'help' for help for a list of valid commands)"%line
        self.emptyline()

    def do_exit(self, line):
        """Exits from the console"""
        return True

    def do_quit(self, line):
        return True

    def do_EOF(self, args):
        """Exit on system end of file character"""
        return True

# ____________________________________________________________
# commands pre and post actions
#    def precmd(self, line):
#        return line
#    def postcmd(self, stop, line):
#        # if there is a problem, just return True : it stops everythings
#        stop = True
#        return stop # quit if stop == True
# ____________________________________________________________
# program pre and post actions
#    def preloop(self):
#        # action for the beginning of the program
#        pass

#    def postloop(self):
#        # action for the end of the program
#        print "exit cli"
# ____________________________________________________________

class HelloCli(Cli):

    def input_hello(self, line):
        return line.replace(",", " and ")

    def output_hello(self, result):
        print result

    def do_hello(self, line):
        self.output_hello("hello, " + self.input_hello(line))
        #return False # if you want to stay into the cli
        return True # if you want to exit

if __name__ == '__main__':
    prompt = HelloCli()
    prompt.cmdloop("intro, modifies Cmd.intro")

telecharger cmd

>>> from cli import Cli
>>> prompt = Cli()
>>> prompt.cmdloop()
cli (command line interpreter)
(type help or ? for commands list)
#Prompt> ?

Documented commands (type help <command>):
==========================================
EOF  exit

Undocumented commands:
======================
cmd  help  quit

#Prompt>

pour ajouter une commande, utiliser simplement l’héritage:

>>> from cli import Cli
>>> class Prompt(Cli):
...   def do_hello(self, line):
...      print "hello %s", line
...
>>> prompt = Prompt()
>>> prompt.cmdloop()
cli (command line interpreter)
(type help or ? for commands list)
#Prompt> ?

Documented commands (type help <command>):
==========================================
EOF  exit

Undocumented commands:
======================
cmd  hello  help  quit

#Prompt> hello world

À faire

faire un petit projet d’interpréteur ligne de commande du jeu C+/C-

lire et écrire dans un fichier

les handle de fichier (file handles)

>>>
>>> fh = file('test', 'w')
>>> fh.write('hello world')
>>> fh.close()
>>> content = file('test', 'r').read()
>>> content
'hello world'
>>>