compiler les modules perl cpan qui utilisent sramdom

Creation: 17 septembre 2014
Mise à jour:
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2014 Jean-Louis BICQUELET-SALAÜN

presentation

dr est un exemple de script générique en python. Je l'ai écrit il y a bien longtemps (2003). C'est un bon model pour montrer comment écrire un script python en ligne de commande avec gestion des options.

construction

dr utilise le module getopt pour gérer les options.

dr fait aussi appel au module sys pour quitter le programme et os pour lister les fichiers.

dr est décomposé en 3 fonctions:

  • help(): qui affiche l'aide
  • man(): qui affiche la page de man
  • dirlst(): qui réalise la tache de listing des fichiers en fonctions des options choisies (sort par exemple)
  • main(): qui est un programme analysant les options et appelant la fonction dirlst():.

gestion des options

La gestion des options se fait à l'aide de la fonction getopt.getopt.

Si une valeur attendue est binaire, on donne la parametre sous forme de lettre ou de nom (exemple: "h" , "help").

Si on attent une valeur en paramètre on termine l'option par le caractère : ou = pour l'option longue (exemple "r", "rep=").

La fonction getopt.getopt retourne deux listes (opts et args). On traite ensuite les cas en fonction des valeurs de (opts.

On remarquera que la gestion des cas imprevues est laissée au Try. En cas d'erreur sur les parametres passés except getopt.GetoptError: est executé et on affiche l'aide.

 try:
    opts,args=getopt.getopt(sys.argv[1:],"hmsr:",["help","man","sort","rep="])
 except getopt.GetoptError:
    help()
    sys.exit(2)

  rep='.'
  sort = 'non'
  for o,a in opts:
     if o== "-v":
       verbose = True
     if o in ("-h","--help"):
       help()
     if o in ("-m","--man"):
       man()
     if o in ("-s","--sort"):
       sort='oui'
     if o in ("-r","--rep"):
       rep=a

Pour faire propre on utilise les lignes. Tous les modules disposent de l'attribut prédéfini __name__. Si vous importez le module, son __name__ est le nom de fichier du module sans le chemin d'accès ni le suffixe. Si lancer le module directement en tant que programme, dans ce cas __name__ va prendre par défaut une valeur spéciale, __name__. On peut donc utiliser dr soit comme module et appeler dirlst():, soit comme un programme qui analyse les arguments et liste les fichiers.

if __name__ == '__main__':
   main() 

Cette astuce permet par exemple de réaliser une baterie de test quand le module est seul et sinon appeler ses fonctions.

heredoc

Python supporte les heredocs delimité par une simple ou une double quotes repétée 3 fois. Dans le cas d'une simple quote il n'y a pas d'interprétation du texte. Dans le cas d'une double quote on peut interpréter et passer les valeurs.

Ainsi la fonction help() est en simple quote car rien ne varie et help() est en double quote pour afficher la date et le numéro de version qui sont en variable globale en début de script et qui sont ainsi plus facilement modifiables.

print """
usage : dr [-r repertoire ] [-s]
"""

amélioration

Dans ce script, on utilise pas de docstring. Celles-ci fournissent un moyen facile d'associer la documentation avec les modules python, les fonctions, les classes et les méthodes.

téléchargement

directory list (dr) dr.py