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

发布于 2024-12-09 23:48:23 字数 286 浏览 1 评论 0原文

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

有什么办法可以做到这一点吗?

最小的例子

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

This describes the script.
"""

import sys


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

I have a Python script with a docstring. When the parsing of the command-line arguments does not succeed, I want to print the docstring for the user's information.

Is there any way to do this?

Minimal example

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

This describes the script.
"""

import sys


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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

兔姬 2024-12-16 23:48:23

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

print(__doc__)

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

The docstring is stored in the module's __doc__ global.

print(__doc__)

By the way, this goes for any module: import sys; print(sys.__doc__). Docstrings of functions and classes are also in their __doc__ attribute.

骄傲 2024-12-16 23:48:23

参数解析应始终使用 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

Argument parsing should always be done with argparse.

You can display the __doc__ string by passing it to the description parameter of 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)

If you call this mysuperscript.py and execute it you get:

$ ./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
吝吻 2024-12-16 23:48:23

这是一种替代方法,它不会对脚本的文件名进行硬编码,而是使用 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)

Here is an alternative that does not hardcode the script's filename, but instead uses sys.argv[0] to print it. Using %(scriptName)s instead of %s improves readability of the code.

#!/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)
一身骄傲 2024-12-16 23:48:23

增强@MartinThoma的答案,使其打印受 Python argparse:如何在帮助文本中插入换行符?

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

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

#!/usr/bin/env python 
”“” 
这总结了脚本。

附加描述性段落。
""" # 编辑此文档字符串


如果 __name__ == '__main__':
    from argparse import ArgumentParser, RawTextHelpFormatter # 编辑了这一行
    解析器 = ArgumentParser(描述=__doc__
                            formatter_class=RawTextHelpFormatter) # 添加了这一行
    # 在这里添加你的参数
    parser.add_argument("-f", "--file", dest="myFilenameVariable",
                        必需=真,
                        help =“将报告写入文件”,metavar =“文件”)
    args = parser.parse_args()
    打印(args.myFilenameVariable) 

如果你调用这个 mysuperscript.py 并执行它,你会得到:

$ ./mysuperscript.py --help
用法:mysuperscript.py [-h] -f FILE

这总结了脚本。

附加描述性段落。

可选参数:
  -h, --help 显示此帮助消息并退出
  -f FILE, --file FILE 将报告写入 FILE

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

An enhancement of @MartinThoma's answer so it prints multi-line docstrings inspired by Python argparse: How to insert newline in the help text?.

Argument parsing should always be done with argparse.

You can display the doc string by passing it to the description
parameter of 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) 

If you call this mysuperscript.py and execute it you get:

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

Without the addition of the formatter_class the output would not have the line break in the docstring.

傲影 2024-12-16 23:48:23

--help 是唯一参数时,这将打印 __doc__ 字符串

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

适用于两者:

  • ./yourscriptname.py --help
  • python3 yourscriptname.py --help

This will print the __doc__ string when --help is the only argument.

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

Works for both:

  • ./yourscriptname.py --help
  • python3 yourscriptname.py --help
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文