17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

232<br />

La bibliothèque standard<br />

TROISIÈME PARTIE<br />

L’ordre de parcours de l’arborescence est défini par le paramètre topdown. Lorsqu’il<br />

est à True, l’arbre est parcouru de bas en haut, et chaque branche est suivie jusqu’à sa<br />

feuille. Si topdown est à False, l’arbre est parcouru dans l’ordre inverse et les nœuds<br />

enfants se présentent toujours avant leurs parents.<br />

Dans le cas où topdown est à True, l’itérateur renvoyé par walk() se base sur la liste<br />

des sous-répertoires renvoyée dans le tuple pour un répertoire donné, pour continuer<br />

son parcours dans la branche. Cette liste peut être modifiée à la volée pour influencer<br />

le fonctionnement de l’algorithme de parcours.<br />

L’exemple ci-dessous parcourt l’arborescence d’une installation Python, pour afficher<br />

tous les fichiers Python exceptés les fichiers __init__.py, en excluant à la volée les<br />

répertoires aux noms spéciaux.<br />

Parcours des sources de Python<br />

>>> for root, dirs, files in os.walk('/usr/lib/python2.5'):<br />

... for dir_ in dirs:<br />

... if (dir_.startswith('_') or<br />

... dir_ in ('demos', 'docs', 'doc', 'test')):<br />

... dirs.remove(dir_)<br />

... for f in files:<br />

... if f.endswith('.py') and f != '__init__.py':<br />

... print(os.path.join(root, f))<br />

...<br />

/usr/lib/python2.5/BaseHTTPServer.py<br />

/usr/lib/python2.5/Bastion.py<br />

/usr/lib/python2.5/CGIHTTPServer.py<br />

/usr/lib/python2.5/ConfigParser.py<br />

/usr/lib/python2.5/Cookie.py<br />

/usr/lib/python2.5/DocXMLRPCServer.py<br />

…<br />

/usr/lib/python2.5/xml/sax/handler.py<br />

/usr/lib/python2.5/xml/sax/saxutils.py<br />

/usr/lib/python2.5/xml/sax/xmlreader.py<br />

L’option onerror, lorsqu’elle est spécifiée, permet d’associer une fonction à toute erreur<br />

système survenue lors du parcours des répertoires, ces erreurs étant rendues silencieuses<br />

par walk() par défaut. L’erreur est alors passée à la fonction, qui devient en quelque<br />

sorte le bloc except et peut décider de provoquer un raise ou de laisser passer l’erreur.<br />

Lecture du répertoire /var/log<br />

>>> import os<br />

>>> def print_error(e):<br />

... print("Lecture impossible %s" % e)<br />

...

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!