互网站开发维护成本高wordpress邮箱解析
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:53
当前位置: 首页 > news >正文
- usage: [-h] –foo FOO
- error: the following arguments are required: –foo如这个例子所示如果一个选项被标记为 required则当该选项未在命令行中出现时parse_args() 将会报告一个错误。
备注 必需的选项通常被认为是不适宜的因为用户会预期 options 都是 可选的因此在可能的情况下应当避免使用它们。
help
help 值是一个包含参数简短描述的字符串。 当用户请求帮助时一般是通过在命令行中使用 -h 或 –help 的方式这些 help 描述将随每个参数一同显示: parser argparse.ArgumentParser(progfrobble)parser.add_argument(–foo, actionstore_true,
… helpfoo the bars before frobbling)parser.add_argument(bar, nargs,
… helpone of the bars to be frobbled)parser.parse_args([-h])
usage: frobble [-h] [–foo] bar [bar …]positional arguments:bar one of the bars to be frobbledoptions:-h, –help show this help message and exit–foo foo the bars before frobblinghelp 字符串可包括各种格式描述符以避免重复使用程序名称或参数 default 等文本。 有效的描述符包括程序名称 %(prog)s 和传给 add_argument() 的大部分关键字参数例如 %(default)s, %(type)s 等等: parser argparse.ArgumentParser(progfrobble)parser.add_argument(bar, nargs?, typeint, default42,
… helpthe bar to %(prog)s (default: %(default)s))parser.print_help()
usage: frobble [-h] [bar]positional arguments:bar the bar to frobble (default: 42)options:-h, –help show this help message and exit由于帮助字符串支持 %-formatting如果你希望在帮助字符串中显示 % 字面值你必须将其转义为 %%。
argparse 支持静默特定选项的帮助具体做法是将 help 的值设为 argparse.SUPPRESS: parser argparse.ArgumentParser(progfrobble)parser.add_argument(–foo, helpargparse.SUPPRESS)parser.print_help()
usage: frobble [-h]options:-h, –help show this help message and exitmetavar
当 ArgumentParser 生成帮助消息时它需要用某种方式来引用每个预期的参数。 默认情况下ArgumentParser 对象使用 dest 值作为每个对象的 name。 默认情况下对于位置参数动作dest 值将被直接使用而对于可选参数动作dest 值将被转为大写形式。 因此一个位置参数 destbar 的引用形式将为 bar。 一个带有单独命令行参数的可选参数 –foo 的引用形式将为 FOO。 示例如下: parser argparse.ArgumentParser()parser.add_argument(–foo)parser.add_argument(bar)parser.parse_args(X –foo Y.split())
Namespace(barX, fooY)parser.print_help()
usage: [-h] [–foo FOO] barpositional arguments:baroptions:-h, –help show this help message and exit–foo FOO可以使用 metavar 来指定一个替代名称: parser argparse.ArgumentParser()parser.add_argument(–foo, metavarYYY)parser.add_argument(bar, metavarXXX)parser.parse_args(X –foo Y.split())
Namespace(barX, fooY)parser.print_help()
usage: [-h] [–foo YYY] XXXpositional arguments:XXXoptions:-h, –help show this help message and exit–foo YYY请注意 metavar 仅改变 显示的 名称 - parse_args() 对象的属性名称仍然会由 dest 值确定。
不同的 nargs 值可能导致 metavar 被多次使用。 提供一个元组给 metavar 即为每个参数指定不同的显示信息: parser argparse.ArgumentParser(progPROG)parser.add_argument(-x, nargs2)parser.add_argument(–foo, nargs2, metavar(bar, baz))parser.print_help()
usage: PROG [-h] [-x X X] [–foo bar baz]options:-h, –help show this help message and exit-x X X–foo bar bazdest
大多数 ArgumentParser 动作会添加一些值作为 parse_args() 所返回对象的一个属性。 该属性的名称由 add_argument() 的 dest 关键字参数确定。 对于位置参数动作dest 通常会作为 add_argument() 的第一个参数提供: parser argparse.ArgumentParser()parser.add_argument(bar)parser.parse_args([XXX])
Namespace(barXXX)对于可选参数动作dest 的值通常取自选项字符串。 ArgumentParser 会通过接受第一个长选项字符串并去掉开头的 – 字符串来生成 dest 的值。 如果没有提供长选项字符串则 dest 将通过接受第一个短选项字符串并去掉开头的 - 字符来获得。 任何内部的 - 字符都将被转换为 _ 字符以确保字符串是有效的属性名称。 下面的例子显示了这种行为: parser argparse.ArgumentParser()parser.add_argument(-f, –foo-bar, –foo)parser.add_argument(-x, -y)parser.parse_args(-f 1 -x 2.split())
Namespace(foo_bar1, x2)parser.parse_args(–foo 1 -y 2.split())
Namespace(foo_bar1, x2)dest 允许提供自定义属性名称: parser argparse.ArgumentParser()parser.add_argument(–foo, destbar)parser.parse_args(–foo XXX.split())
Namespace(barXXX)Action 类
Action 类实现了 Action API是一个返回可调用对象的可调用对象所返回的可调用对象可处理来自命令行的参数。 任何遵循此 API 的对象均可作为 action 形参传给 add_argument()。
class argparse.Action(option_strings, dest, nargsNone, constNone, defaultNone, typeNone, choicesNone, requiredFalse, helpNone, metavarNone)
Action 对象会被 ArgumentParser 用来表示解析从命令行中的一个或多个字符串中解析出单个参数所必须的信息。 Action 类必须接受两个位置参数以及传给 ArgumentParser.add_argument() 的任何关键字参数除了 action 本身。
Action 的实例或作为or return value of any callable to the action 形参的任何可调用对象的返回值应当定义 dest, option_strings, default, type, required, help 等属性。 确保这些属性被定义的最容易方式是调用 Action.init。
Action 的实例应当为可调用对象因此所有子类都必须重载 call 方法该方法应当接受四个形参: parser - 包含此动作的 ArgumentParser 对象。 namespace - 将由 parse_args() 返回的 Namespace 对象。 大多数动作会使用 setattr() 为此对象添加属性。 values - 已关联的命令行参数并提供相应的类型转换。 类型转换由 add_argument() 的 type 关键字参数来指定。 option_string - 被用来发起调用此动作的选项字符串。 option_string 参数是可选的且此参数在动作关联到位置参数时将被略去。
call 方法可以执行任意动作但通常将基于 dest 和 values 来设置 namespace 的属性。 动作子类可定义 format_usage 方法该方法不带参数所返回的字符串将被用于打印程序的用法说明。 如果未提供此方法则将使用适当的默认值。 parse_args() 方法 ArgumentParser.parse_args(argsNone, namespaceNone) 将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。 之前对 add_argument() 的调用决定了哪些对象被创建以及它们如何被赋值。 请参阅 add_argument() 的文档了解详情。 args - 要解析的字符串列表。 默认值是从 sys.argv 获取。 namespace - 用于获取属性的对象。 默认值是一个新的空 Namespace 对象。
选项值语法 parse_args() 方法支持多种指定选项值的方式如果它接受选项的话。 在最简单的情况下选项和它的值是作为两个单独参数传入的: parser argparse.ArgumentParser(progPROG)parser.add_argument(-x)parser.add_argument(–foo)parser.parse_args([-x, X]) Namespace(fooNone, xX)parser.parse_args([–foo, FOO]) Namespace(fooFOO, xNone)对于长选项名称长度超过一个字符的选项选项和值也可以作为单个命令行参数传入使用 分隔它们即可: parser.parse_args([–fooFOO]) Namespace(fooFOO, xNone)对于短选项长度只有一个字符的选项选项和它的值可以拼接在一起: parser.parse_args([-xX]) Namespace(fooNone, xX)有些短选项可以使用单个 - 前缀来进行合并如果仅有最后一个选项或没有任何选项需要值的话: parser argparse.ArgumentParser(progPROG)parser.add_argument(-x, actionstore_true)parser.add_argument(-y, actionstore_true)parser.add_argument(-z)parser.parse_args([-xyzZ]) Namespace(xTrue, yTrue, zZ)无效的参数 在解析命令行时parse_args() 会检测多种错误包括有歧义的选项、无效的类型、无效的选项、错误的位置参数个数等等。 当遇到这种错误时它将退出并打印出错误文本同时附带用法消息: parser argparse.ArgumentParser(progPROG)parser.add_argument(–foo, typeint)parser.add_argument(bar, nargs?) # invalid typeparser.parse_args([–foo, spam]) usage: PROG [-h] [–foo FOO] [bar] PROG: error: argument –foo: invalid int value: spam # invalid optionparser.parse_args([–bar]) usage: PROG [-h] [–foo FOO] [bar] PROG: error: no such option: –bar # wrong number of argumentsparser.parse_args([spam, badger]) usage: PROG [-h] [–foo FOO] [bar] PROG: error: extra arguments found: badger包含 - 的参数 parse_args() 方法会在用户明显出错时尝试给出错误信息但某些情况本身就存在歧义。 例如命令行参数 -1 可能是尝试指定一个选项也可能是尝试提供一个位置参数。 parse_args() 方法在此会谨慎行事位置参数只有在它们看起来像负数并且解析器中没有任何选项看起来像负数时才能以 - 打头。: parser argparse.ArgumentParser(progPROG)parser.add_argument(-x)parser.add_argument(foo, nargs?) # no negative number options, so -1 is a positional argumentparser.parse_args([-x, -1]) Namespace(fooNone, x-1) # no negative number options, so -1 and -5 are positional argumentsparser.parse_args([-x, -1, -5]) Namespace(foo-5, x-1) parser argparse.ArgumentParser(progPROG)parser.add_argument(-1, destone)parser.add_argument(foo, nargs?) # negative number options present, so -1 is an optionparser.parse_args([-1, X]) Namespace(fooNone, oneX) # negative number options present, so -2 is an optionparser.parse_args([-2]) usage: PROG [-h] [-1 ONE] [foo] PROG: error: no such option: -2 # negative number options present, so both -1s are optionsparser.parse_args([-1, -1]) usage: PROG [-h] [-1 ONE] [foo] PROG: error: argument -1: expected one argument如果你有必须以 - 打头的位置参数并且看起来不像负数你可以插入伪参数 – 以告诉 parse_args() 在那之后的内容是一个位置参数: parser.parse_args([–, -f]) Namespace(foo-f, oneNone)另请参阅 针对有歧义参数的 argparse 指引 来了解更多细节。 参数缩写前缀匹配 parse_args() 方法 在默认情况下 允许将长选项缩写为前缀如果缩写无歧义即前缀与一个特定选项相匹配的话: parser argparse.ArgumentParser(progPROG)parser.add_argument(-bacon)parser.add_argument(-badger)parser.parse_args(-bac MMM.split()) Namespace(baconMMM, badgerNone)parser.parse_args(-bad WOOD.split()) Namespace(baconNone, badgerWOOD)parser.parse_args(-ba BA.split()) usage: PROG [-h] [-bacon BACON] [-badger BADGER] PROG: error: ambiguous option: -ba could match -badger, -bacon可产生一个以上选项的参数会引发错误。 此特定可通过将 allow_abbrev 设为 False 来禁用。 在 sys.argv 以外 有时在 sys.argv 以外用 ArgumentParser 解析参数也是有用的。 这可以通过将一个字符串列表传给 parse_args() 来实现。 它适用于在交互提示符下进行检测: parser argparse.ArgumentParser()parser.add_argument( … integers, metavarint, typeint, choicesrange(10), … nargs, helpan integer in the range 0..9)parser.add_argument( … –sum, destaccumulate, actionstore_const, constsum, … defaultmax, helpsum the integers (default: find the max))parser.parse_args([1, 2, 3, 4]) Namespace(accumulatebuilt-in function max, integers[1, 2, 3, 4])parser.parse_args([1, 2, 3, 4, –sum]) Namespace(accumulatebuilt-in function sum, integers[1, 2, 3, 4])命名空间对象 class argparse.Namespace 由 parse_args() 默认使用的简单类可创建一个存放属性的对象并将其返回。 这个类被有意做得很简单只是一个具有可读字符串表示形式的 object。 如果你更喜欢类似字典的属性视图你可以使用标准 Python 中惯常的 vars(): parser argparse.ArgumentParser()parser.add_argument(–foo)args parser.parse_args([–foo, BAR])vars(args) {foo: BAR}另一个用处是让 ArgumentParser 为一个已存在对象而不是为一个新的 Namespace 对象的属性赋值。 这可以通过指定 namespace 关键字参数来实现: class C: … pass …c C()parser argparse.ArgumentParser()parser.add_argument(–foo)parser.parse_args(args[–foo, BAR], namespacec)c.foo BAR其它实用工具 子命令 ArgumentParser.add_subparsers([title][, description][, prog][, parser_class][, action][, option_strings][, dest][, required][, help][, metavar]) 许多程序都会将其功能拆分为一系列子命令例如svn 程序可发起调用的子命令有 svn checkout, svn update 和 svn commit 等。 当一个程序执行需要多组不同种类命令行参数时这种拆分功能的方式是一个非常好的主意。 ArgumentParser 通过 add_subparsers() 方法支持创建这样的子命令。 add_subparsers() 方法通常不带参数地调用并返回一个特殊的动作对象。 该对象只有一个方法 add_parser()它接受一个命令名称和任意多个 ArgumentParser 构造器参数并返回一个可使用通常方式进行修改的 ArgumentParser 对象。 形参的描述 title - 输出帮助的子解析器分组的标题如果提供了描述则默认为 subcommands否则使用位置参数的标题 description - 输出帮助中对子解析器的描述默认为 None prog - 将与子命令帮助一同显示的用法信息默认为程序名称和子解析器参数之前的任何位置参数。 parser_class - 将被用于创建子解析器实例的类默认为当前解析器类例如 ArgumentParser action - 当此参数在命令行中出现时要执行动作的基本类型 dest - 将被用于保存子命令名称的属性名默认为 None 即不保存任何值 required - 是否必须要提供子命令默认为 False (在 3.7 中新增) help - 在输出帮助中的子解析器分组帮助信息默认为 None metavar - 帮助信息中表示可用子命令的字符串默认为 None 并以 {cmd1, cmd2, ..} 的形式表示子命令
一些使用示例: # create the top-level parserparser argparse.ArgumentParser(progPROG)parser.add_argument(–foo, actionstore_true, helpfoo help)subparsers parser.add_subparsers(helpsub-command help)# create the parser for the a commandparser_a subparsers.add_parser(a, helpa help)parser_a.add_argument(bar, typeint, helpbar help)# create the parser for the b commandparser_b subparsers.add_parser(b, helpb help)parser_b.add_argument(–baz, choicesXYZ, helpbaz help)# parse some argument listsparser.parse_args([a, 12]) Namespace(bar12, fooFalse)parser.parse_args([–foo, b, –baz, Z]) Namespace(bazZ, fooTrue)请注意 parse_args() 返回的对象将只包含主解析器和由命令行所选择的子解析器的属性而没有任何其他子解析器。 因此在上面的例子中当指定了 a 命令时将只存在 foo 和 bar 属性而当指定了 b 命令时则只存在 foo 和 baz 属性。 类似地当一个子解析器请求帮助消息时只有该特定解析器的帮助消息会被打印出来。 帮助消息将不包括父解析器或同级解析器的消息。 每个子解析器命令一条帮助消息但是也可以像上面那样通过将 help 参数传入 add_parser() 来给出。 parser.parse_args([–help]) usage: PROG [-h] [–foo] {a,b} …positional arguments:{a,b} sub-command helpa a helpb b helpoptions:-h, –help show this help message and exit–foo foo help parser.parse_args([a, –help]) usage: PROG a [-h] barpositional arguments:bar bar helpoptions:-h, –help show this help message and exit parser.parse_args([b, –help]) usage: PROG b [-h] [–baz {X,Y,Z}]options:-h, –help show this help message and exit–baz {X,Y,Z} baz helpadd_subparsers() 方法也支持 title 和 description 关键字参数。 当两者都存在时子解析器的命令将出现在输出帮助消息中它们自己的分组内。 例如: parser argparse.ArgumentParser()subparsers parser.add_subparsers(titlesubcommands, … descriptionvalid subcommands, … helpadditional help)subparsers.add_parser(foo)subparsers.add_parser(bar)parser.parse_args([-h]) usage: [-h] {foo,bar} …options:-h, –help show this help message and exitsubcommands:valid subcommands{foo,bar} additional help此外add_parser 还支持附加的 aliases 参数它允许多个字符串指向同一子解析器。 这个例子类似于 svn将别名 co 设为 checkout 的缩写形式: parser argparse.ArgumentParser()subparsers parser.add_subparsers()checkout subparsers.add_parser(checkout, aliases[co])checkout.add_argument(foo)parser.parse_args([co, bar]) Namespace(foobar)一个特别有效的处理子命令的方式是将 add_subparsers() 方法与对 set_defaults() 的调用结合起来使用这样每个子解析器就能知道应当执行哪个 Python 函数。 例如: # sub-command functionsdef foo(args): … print(args.x * args.y) …def bar(args): … print(((%s)) % args.z) …# create the top-level parserparser argparse.ArgumentParser()subparsers parser.add_subparsers(requiredTrue)# create the parser for the foo commandparser_foo subparsers.add_parser(foo)parser_foo.add_argument(-x, typeint, default1)parser_foo.add_argument(y, typefloat)parser_foo.set_defaults(funcfoo)# create the parser for the bar commandparser_bar subparsers.add_parser(bar)parser_bar.add_argument(z)parser_bar.set_defaults(funcbar)# parse the args and call whatever function was selectedargs parser.parse_args(foo 1 -x 2.split())args.func(args) 2.0# parse the args and call whatever function was selectedargs parser.parse_args(bar XYZYX.split())args.func(args) ((XYZYX))通过这种方式你可以在参数解析结束后让 parse_args() 执行调用适当函数的任务。 像这样将函数关联到动作通常是你处理每个子解析器的不同动作的最简便方式。 但是如果有必要检查被发起调用的子解析器的名称则 add_subparsers() 调用的 dest 关键字参数将可实现: parser argparse.ArgumentParser()subparsers parser.add_subparsers(destsubparser_name)subparser1 subparsers.add_parser(1)subparser1.add_argument(-x)subparser2 subparsers.add_parser(2)subparser2.add_argument(y)parser.parse_args([2, frobble]) Namespace(subparser_name2, yfrobble)在 3.7 版更改: 新增 required 关键字参数。 FileType 对象 class argparse.FileType(moder, bufsize- 1, encodingNone, errorsNone) FileType 工厂类用于创建可作为 ArgumentParser.add_argument() 的 type 参数传入的对象。 以 FileType 对象作为其类型的参数将使用命令行参数以所请求模式、缓冲区大小、编码格式和错误处理方式打开文件请参阅 open() 函数了解详情: parser argparse.ArgumentParser()parser.add_argument(–raw, typeargparse.FileType(wb, 0))parser.add_argument(out, typeargparse.FileType(w, encodingUTF-8))parser.parse_args([–raw, raw.dat, file.txt]) Namespace(out_io.TextIOWrapper namefile.txt modew encodingUTF-8, raw_io.FileIO nameraw.dat modewb)FileType 对象能理解伪参数 - 并会自动将其转换为 sys.stdin 用于可读的 FileType 对象以及 sys.stdout 用于可写的 FileType 对象: parser argparse.ArgumentParser()parser.add_argument(infile, typeargparse.FileType®)parser.parse_args([-]) Namespace(infile_io.TextIOWrapper namestdin encodingUTF-8)3.4 新版功能: encodings 和 errors 关键字参数。 参数组 ArgumentParser.add_argument_group(titleNone, descriptionNone) 在默认情况下ArgumentParser 会在显示帮助消息时将命令行参数分为“位置参数”和“可选参数”两组。 当存在比默认更好的参数分组概念时可以使用 add_argument_group() 方法来创建适当的分组: parser argparse.ArgumentParser(progPROG, add_helpFalse)group parser.add_argument_group(group)group.add_argument(–foo, helpfoo help)group.add_argument(bar, helpbar help)parser.print_help() usage: PROG [–foo FOO] bargroup:bar bar help–foo FOO foo helpadd_argument_group() 方法返回一个具有 add_argument() 方法的参数分组对象这与常规的 ArgumentParser 一样。 当一个参数被加入分组时解析器会将它视为一个正常的参数但是会在不同的帮助消息分组中显示该参数。 add_argument_group() 方法接受 title 和 description 参数它们可被用来定制显示内容: parser argparse.ArgumentParser(progPROG, add_helpFalse)group1 parser.add_argument_group(group1, group1 description)group1.add_argument(foo, helpfoo help)group2 parser.add_argument_group(group2, group2 description)group2.add_argument(–bar, helpbar help)parser.print_help() usage: PROG [–bar BAR] foogroup1:group1 descriptionfoo foo helpgroup2:group2 description–bar BAR bar help请注意任意不在你的自定义分组中的参数最终都将回到通常的“位置参数”和“可选参数”分组中。 在 3.11 版更改: 在参数分组上调用 add_argument_group() 已被弃用。 此特性从未受到支持并且不保证总能正确工作。此函数出现在 API 中是继承导致的意外并将在未来被移除。 互斥 ArgumentParser.add_mutually_exclusive_group(requiredFalse) 创建一个互斥组。 argparse 将会确保互斥组中只有一个参数在命令行中可用: parser argparse.ArgumentParser(progPROG)group parser.add_mutually_exclusive_group()group.add_argument(–foo, actionstore_true)group.add_argument(–bar, actionstore_false)parser.parse_args([–foo]) Namespace(barTrue, fooTrue)parser.parse_args([–bar]) Namespace(barFalse, fooFalse)parser.parse_args([–foo, –bar]) usage: PROG [-h] [–foo | –bar] PROG: error: argument –bar: not allowed with argument –fooadd_mutually_exclusive_group() 方法也接受一个 required 参数表示在互斥组中至少有一个参数是需要的: parser argparse.ArgumentParser(progPROG)group parser.add_mutually_exclusive_group(requiredTrue)group.add_argument(–foo, actionstore_true)group.add_argument(–bar, actionstore_false)parser.parse_args([]) usage: PROG -h PROG: error: one of the arguments –foo –bar is required请注意当前互斥的参数组不支持 add_argument_group() 的 title 和 description 参数。 但是互斥的参数数可以被添加到具有 title 和 description 的参数组中。 例如: parser argparse.ArgumentParser(progPROG)group parser.add_argument_group(Group title, Group description)exclusive_group group.add_mutually_exclusive_group(requiredTrue)exclusive_group.add_argument(–foo, helpfoo help)exclusive_group.add_argument(–bar, helpbar help)parser.print_help() usage: PROG -hoptions:-h, –help show this help message and exitGroup title:Group description–foo FOO foo help–bar BAR bar help在 3.11 版更改: 在互斥的分组上调用 add_argument_group() 或 add_mutually_exclusive_group() 已被弃用。 这些特性从未受到支持并且不保证总能正确工作。 这些函数出现在 API 中是继承导致的意外并将在未来被移除。 解析器默认值 ArgumentParser.set_defaults(*kwargs) 在大多数时候parse_args() 所返回对象的属性将完全通过检查命令行参数和参数动作来确定。 set_defaults() 则允许加入一些无须任何命令行检查的额外属性: parser argparse.ArgumentParser()parser.add_argument(foo, typeint)parser.set_defaults(bar42, bazbadger)parser.parse_args([736]) Namespace(bar42, bazbadger, foo736)请注意解析器层级的默认值总是会覆盖参数层级的默认值: parser argparse.ArgumentParser()parser.add_argument(–foo, defaultbar)parser.set_defaults(foospam)parser.parse_args([]) Namespace(foospam)解析器层级默认值在需要多解析器时会特别有用。 请参阅 add_subparsers() 方法了解此类型的一个示例。 ArgumentParser.get_default(dest) 获取一个命名空间属性的默认值该值是由 add_argument() 或 set_defaults() 设置的: parser argparse.ArgumentParser()parser.add_argument(–foo, defaultbadger)parser.get_default(foo) badger打印帮助 在大多数典型应用中parse_args() 将负责任何用法和错误消息的格式化和打印。 但是也可使用某些其他格式化方法: ArgumentParser.print_usage(fileNone) 打印一段简短描述说明应当如何在命令行中发起调用 ArgumentParser。 如果 file 为 None则默认使用 sys.stdout。 ArgumentParser.print_help(fileNone) 打印一条帮助消息包括程序用法和通过 ArgumentParser 注册的相关参数信息。 如果 file 为 None则默认使用 sys.stdout。 还存在这些方法的几个变化形式它们只返回字符串而不打印消息: ArgumentParser.format_usage() 返回一个包含简短描述的字符串说明应当如何在命令行中发起调用 ArgumentParser。 ArgumentParser.format_help() 反回一个包含帮助消息的字符串包括程序用法和通过 ArgumentParser 注册的相关参数信息。 部分解析 ArgumentParser.parse_known_args(argsNone, namespaceNone) 有时一个脚本可能只解析部分命令行参数而将其余的参数继续传递给另一个脚本或程序。 在这种情况下parse_known_args() 方法会很有用处。 它的作用方式很类似 parse_args() 但区别在于当存在额外参数时它不会产生错误。 而是会返回一个由两个条目构成的元组其中包含带成员的命名空间和剩余参数字符串的列表。 parser argparse.ArgumentParser()parser.add_argument(–foo, actionstore_true)parser.add_argument(bar)parser.parse_known_args([–foo, –badger, BAR, spam]) (Namespace(barBAR, fooTrue), [–badger, spam])警告 前缀匹配 规则应用于 parse_known_args()。 一个解析器即使在某个选项只是已知选项的前缀时也能读取该选项而不是将其放入剩余参数列表。 自定义文件解析 ArgumentParser.convert_arg_line_to_args(arg_line) 从文件读取的参数见 ArgumentParser 的 fromfile_prefix_chars 关键字参数将是一行读取一个参数。 convert_arg_line_to_args() 可被重载以使用更复杂的读取方式。 此方法接受从参数文件读取的字符串形式的单个参数 arg_line。 它返回从该字符串解析出的参数列表。 此方法将在每次按顺序从参数文件读取一行时被调用一次。 此方法的一个有用的重载是将每个以空格分隔的单词视为一个参数。 下面的例子演示了如何实现此重载: class MyArgumentParser(argparse.ArgumentParser):def convert_arg_line_to_args(self, arg_line):return arg_line.split()退出方法 ArgumentParser.exit(status0, messageNone) 此方法将终结程序退出时附带指定的 status并且如果给出了 message 则会在退出前将其打印输出。 用户可重载此方法以不同方式来处理这些步骤: class ErrorCatchingArgumentParser(argparse.ArgumentParser):def exit(self, status0, messageNone):if status:raise Exception(fExiting because of an error: {message})exit(status)ArgumentParser.error(message) 此方法将向标准错误打印包括 message 的用法消息并附带状态码 2 终结程序。 混合解析 ArgumentParser.parse_intermixed_args(argsNone, namespaceNone) ArgumentParser.parse_known_intermixed_args(argsNone, namespaceNone) 许多 Unix 命令允许用户混用可选参数与位置参数。 parse_intermixed_args() 和 parse_known_intermixed_args() 方法均支持这种解析风格。 这些解析器并不支持所有的 argparse 特性并且当不受支持的特征被使用时将会引发异常。 特别地子解析器以及同时包括可选参数与位置参数的互斥分组是不受支持的。 下面的例子显示了 parse_known_args() 与 parse_intermixed_args() 之间的差异前者会将 [2, 3] 返回为未解析的参数而后者会将所有位置参数收集至 rest 中。 parser argparse.ArgumentParser()parser.add_argument(–foo)parser.add_argument(cmd)parser.add_argument(rest, nargs, typeint)parser.parse_known_args(doit 1 –foo bar 2 3.split()) (Namespace(cmddoit, foobar, rest[1]), [2, 3])parser.parse_intermixed_args(doit 1 –foo bar 2 3.split()) Namespace(cmddoit, foobar, rest[1, 2, 3])parse_known_intermixed_args() 返回由两个条目组成的元组其中包含带成员的命名空间以及剩余参数字符串列表。 当存在任何剩余的未解析参数字符串时 parse_intermixed_args() 将引发一个错误。 3.7 新版功能. 升级 optparse 代码 起初argparse 曾经尝试通过 optparse 来维持兼容性。 但是optparse 很难透明地扩展特别是那些为支持新的 nargs 描述方式和更好的用法消息所需的修改。当When most everything in optparse 中几乎所有内容都已被复制粘贴或打上补丁时维持向下兼容看来已是不切实际的。 argparse 模块在许多方面对标准库的 optparse 模块进行了增强包括: 处理位置参数。 支持子命令。 允许替代选项前缀例如 和 /。 处理零个或多个以及一个或多个风格的参数。 生成更具信息量的用法消息。 提供用于定制 type 和 action 的更为简单的接口。
从 optparse 到 argparse 的部分升级路径: 将所有 optparse.OptionParser.add_option() 调用替换为 ArgumentParser.add_argument() 调用。 将 (options, args) parser.parse_args() 替换为 args parser.parse_args() 并为位置参数添加额外的 ArgumentParser.add_argument() 调用。 请注意之前所谓的 options 在 argparse 上下文中被称为 args。 通过使用 parse_intermixed_args() 而非 parse_args() 来替换 optparse.OptionParser.disable_interspersedargs()。 将回调动作和 callback* 关键字参数替换为 type 或 action 参数。 将 type 关键字参数字符串名称替换为相应的类型对象例如 int, float, complex 等。 将 optparse.Values 替换为 Namespace 并将 optparse.OptionError 和 optparse.OptionValueError 替换为 ArgumentError。 将隐式参数字符串例如使用标准 Python 字典语法的 %default 或 %prog 替换为格式字符串即 %(default)s 和 %(prog)s。 将 OptionParser 构造器 version 参数替换为对 parser.add_argument(–version, actionversion, versionthe version) 的调用。
异常 exception argparse.ArgumentError 来自创建或使用某个参数的消息可选或位置参数。 此异常的字符串值即异常消息并附带有导致该异常的参数的相关信息。 exception argparse.ArgumentTypeError 当从一个命令行字符串到特定类型的转换出现问题时引发。
- 上一篇: 互联网行业网站建设做网站优化推广的好处
- 下一篇: 互助盘网站建设网络服务商主要包括哪些
相关文章
-
互联网行业网站建设做网站优化推广的好处
互联网行业网站建设做网站优化推广的好处
- 技术栈
- 2026年03月21日
-
互联网网站文化网站设计师主要做什么
互联网网站文化网站设计师主要做什么
- 技术栈
- 2026年03月21日
-
互联网网站设计泰安网络科技公司
互联网网站设计泰安网络科技公司
- 技术栈
- 2026年03月21日
-
互助盘网站建设网络服务商主要包括哪些
互助盘网站建设网络服务商主要包括哪些
- 技术栈
- 2026年03月21日
-
互助资金盘网站开发做网站买了域名后
互助资金盘网站开发做网站买了域名后
- 技术栈
- 2026年03月21日
-
户外旅游网站模板秋长网站建设
户外旅游网站模板秋长网站建设
- 技术栈
- 2026年03月21日
