希望使用argparse

时间:2019-06-23 08:34:32

标签: python python-3.x argparse

我正在编写一个新脚本,并且希望在不带任何参数的情况下默认调用-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")

运行文件时,实际上没有任何内容打印到命令行。没有帮助文字或错误或其他任何内容。

3 个答案:

答案 0 :(得分:1)

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

import sys

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

答案 1 :(得分:0)

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

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

请注意,在声明subparsersadd_subparsers(..., required='True'))时,您还可以使命令成为必需,因此,当用户在没有命令的情况下调用时,其用法会出错。

答案 2 :(得分:0)

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