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 ;
- prend 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, utilisez juste 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'
>>>