Blog // Exirel.me

Base de script Python

Par -

Tags : Python, Bonne pratique, Command Line Interface

Il m’arrive fréquemment de devoir écrire des scripts en ligne de commande (ou CLI, pour Command Line Interface), ce que je fais en Python. Pour cela, j’écris à peu près toujours la même structure, que je partage ici :

import sys

def main():
    try:
        do_something_that_may_raise()
    except Exception:
        return 1  # Error exit value
    return 0  # OK exit value

if __name__ == '__main__':
    sys.exit(main())

Une fonction main() isolée me permet de la manipuler à ma guise, d’en appeler une autre au besoin, etc. c’est très pratique pour le prototypage rapide ou le debug.

Appeler cette fonction dans la condition if permet d’importer le fichier depuis un autre module python sans risquer d’exécution involontaire de la fonction.

Gérer la valeur de retour permet, avec sys.exit(), d’avoir un programme qui retourne correctement son “exit status”, permettant de l’intégrer d’autant mieux dans un script shell. Pour me simplifier la vie, la fonction main() est responsable uniquement du contexte extérieur (“input”) et de la valeur de retour (“output”). De cette façon, je n’ai pas à gérer cela dans le reste du code.

Il s’agit vraiment d’un modèle de base pour mes scripts Python. J’utilise bien d’autres petites techniques et outils (comme argparse ou logging), et il y a de quoi écrire des livres entiers sur le sujet.

Pour moi, c’est une question de bonne pratique, et donc d’habitudes — ces mêmes habitudes qui permettent de gagner du temps ou d’éviter des erreurs plus tard.

N’hésitez pas à le copier, le réutiliser, vous l’approprier et en faire quelque chose d’utile pour vous.