试图解析可选的位置参数我遇到了以下问题:
例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('infile')
parser.add_argument('outfile', nargs='?')
parser.add_argument('-v', action='store_true')
print(parser.parse_args())
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./x.py -v in out
Namespace(infile='in', outfile='out', v=True)
$ ./x.py in out -v
Namespace(infile='in', outfile='out', v=True)
$ ./x.py in -v out
usage: x.py [-h] [-v] infile [outfile]
x.py: error: unrecognized arguments: out
Run Code Online (Sandbox Code Playgroud)
为什么不接受第三个程序调用?这是argparse的限制吗?
这是argparse的限制 - 但是在3.7中部分解除了.
Unix工具通常不声称支持选项和参数的混合,即使它们经常这样做.问题是将它与其他一些功能(如子命令)相结合会导致歧义.因此,通常情况下,支持任何这些功能的库会解决问题并且不允许混合.或者他们在最后,开始时和某些难以预测的情况下做了一些允许选择的东西,而不是中间的其他情况.
这就是argparse最初的做法.但3.7增加了混合解析.
你必须手动调用parse_intermixed_args而不是parse_args.
如果你试图将它与任何不合适的功能一起使用,你将得到一个例外(即使你传递的特定args集没有歧义 - 这应该使它更容易调试).
但除此之外,它将按预期工作:选项(当然还有它们的值)可以在命令行的任何位置自由地与位置参数混合.
不幸的是,我不知道PyPI上的后备端口argparse在早期版本中获得3.7 ; 半官方argparse后端主要用于完全没有它的2.7/3.2之前的版本,只反向3.4版本.
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |