La :term:`librairie standard`
================================

les builtins
-------------

.. module:: builtins
    :synopsis: les fonctions directement à disposition sans import spécifique

- le module :mod:`builtins`, tout ce qui est accessible directement

>>> dir('__builtins__')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '_formatter_field_name_split', '_formatter_parser',
'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit',
'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
>>>

- le module :mod:`subprocess`, appels systèmes

.. module:: subprocess
    :synopsis: exécuter une commande shell, récupérer le code retour et la sortie

.. function::  subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)¶

>>> subprocess.call(["ls", "-l"])
0
>>> subprocess.call("exit 1", shell=True)
1

.. function::  subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)¶

>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'

>>> subprocess.check_output("exit 1", shell=True)
Traceback (most recent call last):
   ...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

- le module :mod:`sys`, paramètres et fonctions systèmes

.. module:: sys
    :synopsis: paramètres et fonctions systèmes

.. envvar:: sys.argv

    la ligne de commande

.. function:: sys.exit()

    terminer un programme

.. envvar:: sys.path

    ce qu'il y a dans le :envvar:`PYTHONPATH`

.. module:: optparse
    :synopsis: parsing de la ligne de commande

- le module :mod:`optparse` pour faire des outils ligne de commande

module plus récent :  argparse

.. literalinclude:: snippets/cmdline.py

- les modules de tests unitaires :mod:`unittest` et :mod:`doctests`

.. module:: unittest
    :synopsis: module de tests unitaires

.. module:: doctest
    :synopsis: module de tests unitaires basé sur les docstrings

- le module :mod:`xml.etree` pour parser du xml

::

    tree = xml.parse("testFile.xml")
    rootElement = tree.getroot()
    bookList = rootElem.findall("Books")
    if bookList != None:
        for book in bookList:
            #faire quelque chose avec les livres

- le module :mod:`urllib` pour parser les urls et les manipuler (`urllib2`)

.. module:: urllib
    :synopsis: parse des urls

.. function:: urllib.urlopen(url)

    lit une url distante

.. module:: time
    :synopsis: caculs de temps

- :mod:`time` pour la manipulation de temps

::

    t1 = time.clock()
    # Do Stuff Here
    t2 = time.clock()
    print t2 - t1

**now**

::

    import time
    now = time.localtime(time.time())
    dateStr = time.strftime("%A, %B %d, %Y,  %I:%M %p", now)
    print dateStr

.. module:: getpass
    :synopsis: recupération des mots de passe en ligne de commande

- le module :mod:`getpass` pour gérer les motes de passe

>>> import getpass
>>> p = getpass.getpass()
Password:
>>> p
'toto'
>>>


.. module:: shelve
    :synopsis: linéarisation de données

- linéarisation de données

>>> import shelve
>>> shelve.open("database", 'c')
{}
>>> s = shelve.open("database", 'c')
>>> s
{}
>>> s["o"] = ('a', 'b', 'c')
>>> s.cl
s.clear  s.close
>>> s.cl
s.clear  s.close
>>> s.close()
>>>


.. module:: abc
    :synopsis: les abstract base classes

- le module :mod:`abc` pour faire des interfaces propres

.. function:: abc.register(subclass)

    exemple

    ::

        from abc import ABCMeta

        class MyABC:
            __metaclass__ = ABCMeta

        MyABC.register(tuple)

        assert issubclass(tuple, MyABC)
        assert isinstance((), MyABC)

.. module:: hotshot
  :synopsis: benchmark

- le module :mod:`hotshot` benchmark

::

    import hotshot
    prof = hotshot.Profile('toto.txt')
    prof.runcall(make_description)
    prof.close()


- un exemple de librairie externe : :mod:`IPy`

.. module:: IPy
    :synopsis: traitement des ips en python < python 3.3 remplacé par ipadress

::

    sudo apt-get install python-ipy

::

    from IPy import IP

    try:
        ipy = IP('{0}/{1}'.format(ip, mask), make_net=True)
    except ValueError:
        print "marche pas"
    network = ipy.net()
    broadcast = ipy.broadcast()
    return broadcast, network