【发布时间】:2014-12-29 03:57:42
【问题描述】:
使用argparse,我希望能够将可选参数与多个位置参数混合,例如,svn 允许:
svn ls first/path -r 1000 second/path
目前,Python 并未正式支持此功能(c.f. http://bugs.python.org/issue14191)。我写了这个解决方法,现在我想知道,如果 a) 有更好/更简单/更优雅的方法,并且 b) 是否有人可以在代码中看到在某些情况下可能会破坏它的内容:
#!/usr/bin/env python3
import argparse as ap
p = ap.ArgumentParser()
p.add_argument('-v', action='store_true')
p.add_argument('-l', action='store_true')
p.add_argument('files', nargs='*', action='append')
p.add_argument('remainder', nargs=ap.REMAINDER, help=ap.SUPPRESS)
args = p.parse_args()
while args.remainder != []:
args = p.parse_args(args.remainder, args)
print(args)
使用示例:
./test.py a b -v c d
输出:
Namespace(files=[['a', 'b'], ['c', 'd']], l=False, remainder=[], v=True)
【问题讨论】:
-
14191 中有一个解决方法的版本,您可以下载并添加到您的代码中 - 无需修改您的
argparse。如果您需要定义更多positionals,您可能需要它。
标签: python python-3.x command-line-arguments argparse