Ich habe ein Python-Skript mit einer Dokumentzeichenfolge. Wenn das Parsen der Befehlszeilenargumente nicht erfolgreich ist, möchte ich die Dokumentzeichenfolge für die Benutzerinformationen drucken.
Gibt es eine Möglichkeit, dies zu tun?
Minimales Beispiel
#!/usr/bin/env python
"""
Usage: script.py
This describes the script.
"""
import sys
if len(sys.argv) < 2:
print("<here comes the docstring>")
Antworten:
Die Dokumentzeichenfolge wird im
__doc__
globalen Modul gespeichert .Dies gilt übrigens für jedes Modul :
import sys; print(sys.__doc__)
. Dokumentzeichenfolgen von Funktionen und Klassen sind ebenfalls in ihrem__doc__
Attribut enthalten.quelle
help(module_name)
nachdem Sie dieses Modul importiert haben.Hier ist eine Alternative, die den Dateinamen des Skripts nicht fest codiert, sondern stattdessen sys.argv [0] zum Drucken verwendet. Die Verwendung von% (scriptName) s anstelle von% s verbessert die Lesbarkeit des Codes.
#!/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)
quelle
"""Usage: {scriptName}""".format(scriptName = sys.argv[0])
Das Parsen von Argumenten sollte immer mit durchgeführt werden
argparse
.Sie können die
__doc__
Zeichenfolge anzeigen, indem Sie sie an dendescription
Parameter Argparse übergeben:#!/usr/bin/env python """ This describes the script. """ if __name__ == '__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)
Wenn Sie diese mysuperscript.py aufrufen und ausführen, erhalten Sie:
$ ./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
quelle
Dadurch wird die
__doc__
Zeichenfolge gedruckt, wenn dies--help
das einzige Argument ist.if __name__=='__main__': if len(sys.argv)==2 and sys.argv[1]=='--help': print(__doc__)
Funktioniert für beide:
./yourscriptname.py --help
python3 yourscriptname.py --help
quelle