小编典典

无法使argparse读取带破折号的带引号的字符串吗?

python

有没有办法使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:像这个看起来是实际就是BEING已经讨论了一个错误:http://www.gossamer-
threads.com/lists/python/bugs/89529,http://python.6.x6.nabble.com/issue9334-
argparse不接受采用参数从optp-
td578790.html开始的带破折号的参数。仅在2.7中存在,而在optparse中不存在。

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


阅读 209

收藏
2021-01-20

共1个答案

小编典典

您可以使用空格开头作为参数,这python tst.py -e ' -e blah'是一种非常简单的解决方法。lstrip()如果愿意,只需将其恢复正常即可。

或者,如果第一个“子参数”也不是原始函数的有效参数,那么您根本不需要执行任何操作。也就是说,python tst.py -e '-s hi -e blah'不起作用的唯一原因是因为-s是的有效选项tst.py

此外,现在已弃用的optparse模块可以正常工作。

2021-01-20