gpt4 book ai didi

Python argparse REMAINDER 不清楚

转载 作者:太空狗 更新时间:2023-10-30 02:47:52 36 4
gpt4 key购买 nike

如文档所示:

argparse.REMAINDER. All the remaining command-line arguments are gathered into a list. This is commonly useful for command line utilities that dispatch to other command line utilities:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo')
>>> parser.add_argument('command')
>>> parser.add_argument('args', nargs=argparse.REMAINDER)
>>> print parser.parse_args('--foo B cmd --arg1 XX ZZ'.split())
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')

我试图将它用于完全相同的目的,但在某些情况下它对我来说似乎有问题(或者我可能理解错了概念):

import argparse

a = argparse.ArgumentParser()

a.add_argument('-qa', nargs='?')
a.add_argument('-qb', nargs='?')
a.add_argument('rest', nargs=argparse.REMAINDER)

a.parse_args('-qa test ./otherutil bar -q atr'.split())

结果:

test.py: error: ambiguous option: -q could match -qa, -qb

很明显,如果 otherutil 有这样的参数,以某种方式与给 argparse 的参数“冲突”,它似乎无法正常工作。

我希望当 argparse 到达 REMAINDER 类型的参数时,它只会用完列表末尾的所有字符串,而无需任何进一步的解析。我能以某种方式达到这种效果吗?

最佳答案

我在尝试将选项分派(dispatch)给底层实用程序时遇到了这个问题。我最终使用的解决方案是 nargs='*' 而不是 nargs=argparse.REMAINDER,然后只使用“伪参数”-- 将我的命令和底层工具的选项分开:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--myflag', action='store_true')
>>> parser.add_argument('toolopts', nargs='*')
>>> parser.parse_args('--myflag -- -a --help'.split())
Namespace(myflag=True, toolopts=['-a', '--help'])

这很容易记录在帮助输出中。

关于Python argparse REMAINDER 不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15480062/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com