1
当使用argparse时,我该如何确定某些东西是位置参数,可选参数还是子命令?是否有使用argparse的规则?
当使用argparse时,我该如何确定某些东西是位置参数,可选参数还是子命令?是否有使用argparse的规则?
A 位置参数通常是要求。例如,如果你的程序总是需要传递一个文件来读取,那么该文件将是一个位置的参数。
安可选参数是,毫不奇怪,可选。这可能是一个参数,可以有一个理智的默认值(即您的程序默认为在端口8080
上运行,但可以接受其他端口),也可能是打开可选行为的标志(即verbose
标志)。
A 子分析器通常用于当您要将一整套不同的命令添加到单个脚本时。也许你的脚本可以读取或写入文件,并且read
和write
操作期望不重叠的各种标志。在这种情况下,为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
首先,决定你想要什么。接下来,你使用'argparse'。全取决于你。 – zondo
是否有规则或最佳实践或什么? – polka
对需要的东西使用位置参数。对于不需要的东西使用可选参数。不幸的是,我不知道“子命令”是什么意思。 – zondo