【问题标题】:Looking to set a global default argument with argparse [duplicate]希望使用 argparse 设置全局默认参数 [重复]
【发布时间】:2019-11-05 10:00:00
【问题描述】:

我正在编写一个新脚本,并且希望在不带任何参数的情况下调用脚本时默认调用 -h 或 --help 参数。因此,例如,如果有人调用 command_line_utility.py,那么我希望它打印您使用 command_line_utility.py -h 获得的输出。

我翻遍了文档并查看了一些示例,但所有示例都指定了默认参数值,实际上并没有让 arg parse 调用默认参数。

# Setting up Main Argument Parser
    main_parser = argparse.ArgumentParser(description="A set of python web utility scripts")
    main_parser.add_argument("-v",'--version', action='version', version='kuws V0.0.1')

    # Setting up the main subparser
    subparsers = main_parser.add_subparsers(help="Available commands found below, for more info on a command use: python command_line_utility.py <command> -h or kuws <command> -h")


    """Code below handles 'redirects' command in the main script
    i.e. >python command_line_utility.py redirects or kuws redirects
    """
    redirects_parser = subparsers.add_parser('redirects', argument_default='-u',
        help='Allows you to trace redirects and get other information')

    redirects_parser.add_argument('-u', "--url", 
        help='usage: python main.py redirects -u <url>; Lets you see the trace for a url', nargs='?', dest="trace_url")

当我运行文件时,实际上没有任何东西打印到命令行。没有帮助文本或错误或任何内容。

【问题讨论】:

  • 您对使用普通帮助命令“-h”或“--help”时的显示满意吗?我看不出全局默认值与显示帮助有什么关系。
  • 该命令将被添加到路径中,因此为了使用能力,我希望默认为 -h,因此当人们调用该命令时,他们只会看到帮助文本而不是什么。这类似于不提供参数时 git 命令的工作方式。
  • parser 中的任何内容都是必需的,因此不会引发错误。在旧版本中,subparsers 是必需的,现在您已经明确说明了。其他人已经表明您可以显示完整的help 它没有任何命令行值。
  • 我不认为argument_default 参数对你有用。通常参数的默认值是Noneargument_default 只是更改该值的另一​​种方式(对于此子解析器的所有参数)。更多时候我们在add_argument 命令中使用default 参数。

标签: python python-3.x argparse


【解决方案1】:

恐怕argparse对此没有任何内置支持,但您可以识别这种情况并打印帮助消息:

import sys

if len(sys.argv)==1:
    parser.print_help(sys.stderr)
    sys.exit(1)

【讨论】:

    【解决方案2】:

    检查len(sys.argv)==1 并在这种情况下调用this answer 中描述的解析器的print_help 方法到similar question 是在没有给出参数时打印解析器中定义的帮助消息的一种可能方法.

    【讨论】:

      【解决方案3】:

      使用子解析器时,一种常见的方案是使用set_defaults(func=&lt;function to be called&gt;),然后调用此函数(如sub-commands 中所述)。

      您可以先简单地定义第一个set_defaults(func=help),它将被您的命令功能覆盖。

      请注意,您也可以在声明 subparsers (add_subparsers(..., required='True')) 时将命令设为必需,因此,当用户在没有命令的情况下调用时,她会收到使用错误。

      【讨论】:

        猜你喜欢
        • 2014-12-07
        • 1970-01-01
        • 2017-10-13
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 2018-12-25
        • 2018-01-22
        • 2016-12-15
        相关资源
        最近更新 更多