Eph*_*eal 4 python argparse python-3.x
我在 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()
Run Code Online (Sandbox Code Playgroud)
我正在按以下方式执行我的程序。
myProgram.py /path/to/file -project super --test
Run Code Online (Sandbox Code Playgroud)
如果我使用上面的 sysntax ,它就可以正常工作
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
但是,如果我采用 sys.argv 作为输入
args = parser.parse_args(sys.argv)
Run Code Online (Sandbox Code Playgroud)
解析器突然对参数的顺序很挑剔,我得到了无法识别的参数错误。
usage: fbu.py [-h] [-project PROJECT] [-release RELEASE] [--test] projectPath
fbu.py: error: unrecognized arguments: /path/to/file
Run Code Online (Sandbox Code Playgroud)
正如我从错误中看到的,还使用了 -h 参数。路径参数必须是最后一个,并且在最后一个示例中错误是有意义的。但为什么它不关心第一个例子中的顺序呢?
编辑:我正在使用 python 版本 3.4.3
sys.argv包含脚本名称作为第一项,即myProgram.py. 这个论点取代了 projectPath. 现在多了一个位置参数/path/to/file,它无法与任何参数匹配,因此会出现错误。
parse_args不带参数的调用ArgumentParser足够聪明,可以忽略解析脚本名称。但是当显式传递参数数组时,它不能这样做,并且会解析所有内容。
| 归档时间: |
|
| 查看次数: |
4506 次 |
| 最近记录: |