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)

.. _cmdlabel:

le module :mod:`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 :mod:`cmd` : exemple d'utilisation

.. module:: cmd
    :synopsis: interpréteur ligne de commande

.. literalinclude:: snippets/cli.py

:download:`telecharger cmd <snippets/cli.py>`

::

    >>> 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


.. todo:: 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'
>>>