2016-04-28 77 views
1

当使用argparse时,我该如何确定某些东西是位置参数,可选参数还是子命令?是否有使用argparse的规则?

+0

首先,决定你想要什么。接下来,你使用'argparse'。全取决于你。 – zondo

+0

是否有规则或最佳实践或什么? – polka

+0

对需要的东西使用位置参数。对于不需要的东西使用可选参数。不幸的是,我不知道“子命令”是什么意思。 – zondo

回答

3

A 位置参数通常是要求。例如,如果你的程序总是需要传递一个文件来读取,那么该文件将是一个位置的参数。

可选参数是,毫不奇怪,可选。这可能是一个参数,可以有一个理智的默认值(即您的程序默认为在端口8080上运行,但可以接受其他端口),也可能是打开可选行为的标志(即verbose标志)。

A 子分析器通常用于当您要将一整套不同的命令添加到单个脚本时。也许你的脚本可以读取或写入文件,并且readwrite操作期望不重叠的各种标志。在这种情况下,为read操作分配一个子分析器并为write操作分配一个子分析器以简化对这些标记的分析。

大多数简单的程序都希望保留位置和可选参数:通常您会知道何时需要使用子分析器。

这是一个使用所有三个(很做作)的示例程序:

import argparse 

def parse_args(): 
    p = argparse.ArgumentParser() 
    p.add_argument("filename", help="Filename to interact with") 
    p.add_argument("-v", "--verbose", action="store_true", help="Turn on verbose mode") 

    subparsers = p.add_subparsers(title="Commands", dest="command") 

    read_p = subparsers.add_parser("read", help="read from FILENAME") 

    load_p = subparsers.add_parser("load", help="load from FILENAME") 
    return p.parse_args() 

if __name__ == "__main__": 
    args = parse_args() 

下面是它的说明文字:

usage: foo.py [-h] [-v] filename {read,load} ... 

positional arguments: 
    filename  Filename to interact with 

optional arguments: 
    -h, --help  show this help message and exit 
    -v, --verbose Turn on verbose mode 

Commands: 
    {read,load} 
    read   read from FILENAME 
    load   load from FILENAME