如何在执行时打印Python文件的docstring?

时间:2011-10-17 09:09:03

标签: python docstring

我有一个带有docstring的Python脚本。当解析命令行参数不成功时,我想打印文档字符串以获取用户的信息。

有没有办法做到这一点?

最小的例子

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

This describes the script.
"""

import sys


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

5 个答案:

答案 0 :(得分:75)

docstring存储在模块的__doc__全局。

print(__doc__)

顺便说一句,这适用于任何模块:import sys; print(sys.__doc__)。函数和类的文档字符串也在__doc__属性中。

答案 1 :(得分:13)

这是一种替代方法,它不对脚本的文件名进行硬编码,而是使用sys.argv [0]进行打印。使用%(scriptName)而不是%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)

答案 2 :(得分:7)

应始终使用argparse完成参数解析。

您可以通过将__doc__字符串传递给Argparse的description参数来显示该字符串:

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

答案 3 :(得分:0)

我遇到了这样的问题,走过网络,幸运的是找到了答案,学习了sys模块,并在 Python 中创建了一个脚本,这里就是

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

键入./yourscriptname.py --helppython3 yourscriptname.py --help,它会显示您的文档字符串

答案 4 :(得分:0)

对@MartinThoma 的回答进行了增强,因此它可以打印受 Python argparse: How to insert newline in the help text? 启发的多行文档字符串。

<块引用>

参数解析应始终使用 argparse 完成。

您可以通过将 doc 字符串传递给描述来显示它 Argparse 的参数:

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

Additional descriptive paragraph(s).
"""  # Edited this docstring


if __name__ == '__main__':
    from argparse import ArgumentParser, RawTextHelpFormatter  # Edited this line
    parser = ArgumentParser(description=__doc__
                            formatter_class=RawTextHelpFormatter)  # Added this line
    # 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 summarizes the script.

Additional descriptive paragraph(s).

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

如果不添加 formatter_class,输出将不会在文档字符串中包含换行符。