Як я можу надрукувати документацію файлу Python під час її виконання?


79

У мене є скрипт Python з текстовою документацією. Коли аналіз аргументів командного рядка не вдається, я хочу надрукувати рядок документації для інформації користувача.

Чи є спосіб зробити це?

Мінімальний приклад

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

This describes the script.
"""

import sys


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

1
Існують бібліотеки для розбору аргументів cmdline: argparse (> = 2,7) та optparse. docs.python.org/dev/library/argparse.html docs.python.org/dev/library/optparse.html
codeape

10
Я це знаю, але це не стосується питання
тіас

Відповіді:


93

Рядок документа зберігається в __doc__глобальному модулі .

print(__doc__)

До речі, це стосується будь-якого модуля: import sys; print(sys.__doc__). Документи функцій і класів також є їх __doc__атрибутом.


2
Це, безумовно, працює, але є інший спосіб, який показує інтерфейс довідки модуля, що виглядає ріднішим виглядом :: help(module_name)після імпорту цього модуля.
danbgray

1
@danbgray Я думаю, що ти отримуєш те, для чого використовується argparse
jamescampbell

13

Ось альтернатива, яка не кодує ім’я файлу сценарію, а використовує sys.argv [0] для його друку. Використання% (scriptName) s замість% s покращує читабельність коду.

#!/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)

Дякую. Зазвичай у мене є функція use (), яка використовує sys.argv [0], яка викликається перед друком документації.
тіас

@ wint3rschlaefer, чи можете ви пояснити, як Usage:% (scriptName) s отримує ім'я сценарію? Як цей механізм називається в python?
олала

1
@ wint3rschlaefer Можливо, варто оновити версію python3, наприклад """Usage: {scriptName}""".format(scriptName = sys.argv[0])
Cimbali

12

Синтаксичний аналіз аргументів слід виконувати завжди argparse.

Ви можете відобразити __doc__рядок, передавши його descriptionпараметру Argparse:

#!/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)

Якщо ви викликаєте цей mysuperscript.py і виконуєте його, ви отримуєте:

$ ./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

0

Це надрукує __doc__рядок, коли --helpце єдиний аргумент.

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

Працює для обох:

  • ./yourscriptname.py --help
  • python3 yourscriptname.py --help
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.