web-dev-qa-db-fra.com

Comment imprimer une docstring d'un fichier Python lors de son exécution?

J'ai un script Python avec une docstring. Lorsque l'analyse des arguments de la ligne de commande échoue, je veux imprimer la docstring pour les informations de l'utilisateur.

Est-ce qu'il y a un moyen de faire ça?

Exemple minimal

#!/usr/bin/env python
"""
Usage: script.py

This describes the script.
"""

import sys


if len(sys.argv) < 2:
    print("<here comes the docstring>")
67
thias

La docstring est stockée dans le module global __doc__ Du module.

print(__doc__)

Soit dit en passant, cela vaut pour n'importe quel module: import sys; print(sys.__doc__). Les docstrings de fonctions et de classes se trouvent également dans leur attribut __doc__.

75
Petr Viktorin

Voici une alternative qui ne code pas en dur le nom de fichier du script, mais utilise à la place sys.argv [0] pour l'imprimer. L'utilisation de% (scriptName) s au lieu de% s améliore la lisibilité du code.

#!/usr/bin/env python
"""
Usage: %(scriptName)s

This describes the script.
"""

import sys
if len(sys.argv) < 2:
   print __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}
   sys.exit(0)
13
wint3rschlaefer

L'analyse des arguments doit toujours être effectuée avec argparse .

Vous pouvez afficher le __doc__ chaîne en la passant au paramètre description d'Argparse:

#!/usr/bin/env python
"""
This describes the script.
"""


if __== '__main__':
    from argparse import ArgumentParser
    parser = ArgumentParser(description=__doc__)
    # Add your arguments here
    parser.add_argument("-f", "--file", dest="myFilenameVariable",
                        required=True,
                        help="write report to FILE", metavar="FILE")
    args = parser.parse_args()
    print(args.myFilenameVariable)

Si vous appelez ceci mysuperscript.py et l'exécutez, vous obtenez:

$ ./mysuperscript.py --help
usage: mysuperscript.py [-h] -f FILE

This describes the script.

optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE  write report to FILE
8
Martin Thoma

J'ai eu un tel problème, j'ai parcouru le Web et j'ai heureusement trouvé la réponse, appris le module sys et créé un script en Python, le voici

if __name__=='__main__':
 if len(sys.argv)==2 and sys.argv[1]=='--help':
    print(__doc__)

en tappant ./yourscriptname.py --help ou python3 yourscriptname.py --help il affichera votre docstring

0
Mr CaT