【发布时间】:2013-04-17 00:01:07
【问题描述】:
有没有办法让 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?
-
我使用的是 Python 2.7。
-
这在 Python 2.7 上对我来说很好用。您是否配置了任何其他参数?
-
是的,有很多。此外, -e 是我的程序的子解析器之一的参数。我会贴一个更完整的代码sn-p,让大家更清楚。
-
嗯...非常确定。我所有的其他选项都可以正常工作,只要引用的字符串不以破折号开头,extraEnvVars 就会做它应该做的事情。例如,python Application.py queue -env " -env" 工作正常。
标签: python argparse command-line-interface