执行时如何打印Python文件的文档字符串?


78

我有一个带文档字符串的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 2011年

10
我知道,但它是不相关的问题
thias

Answers:


92

文档字符串存储在模块的__doc__全局变量中。

print(__doc__)

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


2
绝对可以,但是还有另一种方式可以显示更原始的模块帮助界面:: help(module_name)导入该模块之后。
丹布雷2013年

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]在打印文档字符串之前被调用。
thias

@ wint3rschlaefer,您能解释一下用法:%(scriptName)s如何获得脚本名称?python中的这种机制叫什么?
olala

1
@ wint3rschlaefer也许这是值得更新与python3版本一样 """Usage: {scriptName}""".format(scriptName = sys.argv[0])
CIMBALI

12

参数解析应始终使用进行argparse

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

#!/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.