我有一个带文档字符串的Python脚本。当命令行参数的解析不成功时,我想打印文档字符串以获取用户信息。
有什么办法吗?
最小的例子
#!/usr/bin/env python
"""
Usage: script.py
This describes the script.
"""
import sys
if len(sys.argv) < 2:
print("<here comes the 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>")
Answers:
文档字符串存储在模块的__doc__
全局变量中。
print(__doc__)
顺便说一下,这适用于任何模块:import sys; print(sys.__doc__)
。函数和类的文档字符串也位于其__doc__
属性中。
help(module_name)
导入该模块之后。
这是一种替代方案,它不对脚本的文件名进行硬编码,而是使用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)
"""Usage: {scriptName}""".format(scriptName = sys.argv[0])
参数解析应始终使用进行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