我在python代码中创建了以下参数解析器。
parser = argparse.ArgumentParser()
parser.add_argument('projectPath')
parser.add_argument('-project')
parser.add_argument('-release')
parser.add_argument('--test', default=False, action='store_true')
args = parser.parse_args()
并且我正在以以下方式执行程序。
myProgram.py /path/to/file -project super --test
如果我将上面的sysntax与
args = parser.parse_args()
但是,如果我接受并使用sys.argv作为输入
args = parser.parse_args(sys.argv)
解析器突然对参数的顺序挑剔,我得到了无法识别的参数错误。
usage: fbu.py [-h] [-project PROJECT] [-release RELEASE] [--test] projectPath
fbu.py: error: unrecognized arguments: /path/to/file
从错误中可以看到,并且也使用-h参数。 path参数必须为last,在最后一个示例中,该错误才有意义。
但是,为什么不关心第一个示例中的顺序?
编辑:我正在使用python版本3.4.3
python大神给出的解决方案
sys.argv
包含脚本名称作为第一项,即myProgram.py
。该参数采用projectPath
的位置。现在有一个附加的位置参数/path/to/file
,它不能与任何参数匹配,因此会出现错误。
在不使用参数parse_args
的情况下调用ArgumentParser
足够聪明,可以省略脚本名称的解析。但是,当显式传递一个参数数组时,它将无法执行该操作并将解析所有内容。