我正在使用Python的argparse
模块来解析命令行参数。考虑下面这个简化的例子,
# File test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store')
parser.add_argument('-a', action='append')
args = parser.parse_args()
print(args)
这可以成功地被调用,如下所示:
python test.py -s foo -a bar -a baz
-s
后和每个 -a
后必须跟一个参数,如果需要空格,则需用引号包含。但是如果一个参数以破折号 (-
) 开头且不含任何空格,则代码会崩溃:
python test.py -s -begins-with-dash -a bar -a baz
错误:参数 -s:需要一个参数
它将-begins-with-dash
解释为新选项的开始,这是非法的,因为-s
尚未接收到其所需的参数。但很明显,没有名为-begins-with-dash
的选项已被定义,因此它不应该首先将其解释为选项。我该如何使argparse
接受具有一个或多个前导破折号的参数?
argparse
的解析方法,要做到这一点很难,甚至是不可能的。https://bugs.python.org/issue9334 - hpaulj