gpt4 book ai didi

python - 无法让 argparse 读取带有破折号的引号字符串?

转载 作者:IT老高 更新时间:2023-10-28 20:37:56 27 4
gpt4 key购买 nike

有没有办法让 argparse 将两个引号之间的任何内容识别为单个参数?它似乎一直看到破折号并假设它是一个新选项的开始

我有类似的东西:

mainparser = argparse.ArgumentParser()
subparsers = mainparser.add_subparsers(dest='subcommand')
parser = subparsers.add_parser('queue')
parser.add_argument('-env', '--extraEnvVars', type=str,
help='String of extra arguments to be passed to model.')
...other arguments added to parser...

但是当我运行时:

python Application.py queue -env "-s WHATEVER -e COOL STUFF"

它给了我:

Application.py queue: error: argument -env/--extraEnvVars: expected one argument

如果我省略第一个破折号,它会完全正常工作,但我能够传入一个带有破折号的字符串是至关重要的。我试过用\转义它,这会导致它成功,但会将\添加到参数字符串有谁知道如何解决这个问题?无论 -s 是否是解析器中的参数,都会发生这种情况。

编辑:我使用的是 Python 2.7。

编辑2:

python Application.py -env " -env"

工作得很好,但是

python Application.py -env "-env"

没有。

EDIT3:看起来这实际上是一个已经在争论的错误:http://www.gossamer-threads.com/lists/python/bugs/89529 , http://python.6.x6.nabble.com/issue9334-argparse-does-not-accept-options-taking-arguments-beginning-with-dash-regression-from-optp-td578790.html .它仅在 2.7 中而不在 optparse 中。

EDIT4:当前打开的错误报告是:http://bugs.python.org/issue9334

最佳答案

更新答案:

调用时可以加等号:

python Application.py -env="-env"

原答案:

我在做你想做的事情时也遇到了麻烦,但是 argparse 中有一个解决方法,即 parse_known_args方法。这将使您尚未定义的所有参数都通过解析器,并假设您会将它们用于子进程。缺点是您不会收到带有错误参数的错误报告,并且您必须确保您的选项和子流程的选项之间没有冲突。

另一种选择是强制用户使用加号而不是减号:

python Application.py -e "+s WHATEVER +e COOL STUFF"

然后在传递给子进程之前,在后处理中将“+”更改为“-”。

关于python - 无法让 argparse 读取带有破折号的引号字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174992/

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