使用 argparse 有规则吗?
Are there rules to using argparse?
当使用 argparse 时,我如何决定某个东西应该是位置参数、可选参数还是子命令?
位置 参数通常是必需的。例如,如果您的程序总是需要传递一个文件来读取,那么该文件将是一个 positional 参数。
可选 参数毫无疑问是 可选。这可能是一个参数,可以有一个合理的默认值(即你的程序默认为端口 8080
上的 运行 但可以接受其他端口)或者它可能是一个标志来打开可选行为(即 verbose
旗帜)。
A subparser 通常在您想要将一整套不同的命令添加到单个脚本时使用。也许您的脚本可以读取或写入文件,并且 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 时,我如何决定某个东西应该是位置参数、可选参数还是子命令?
位置 参数通常是必需的。例如,如果您的程序总是需要传递一个文件来读取,那么该文件将是一个 positional 参数。
可选 参数毫无疑问是 可选。这可能是一个参数,可以有一个合理的默认值(即你的程序默认为端口 8080
上的 运行 但可以接受其他端口)或者它可能是一个标志来打开可选行为(即 verbose
旗帜)。
A subparser 通常在您想要将一整套不同的命令添加到单个脚本时使用。也许您的脚本可以读取或写入文件,并且 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