我想实现一个 arg 解析器,它允许我将单元测试作为子命令之一运行,盲目地将参数传递给 unittest.main()。例如。,
$ foo.py unittest [args to pass to unittest.main()]
以及其他子命令:
$ foo.py foo ...
$ foo.py bar ...
按照 argparse 的示例,这是有效的:
#!/usr/bin/python
import argparse
p = argparse.ArgumentParser(prog='PROG')
p.add_argument('-v', '--verbose', action='store_true')
sub = p.add_subparsers(dest='cmd')
foo = sub.add_parser('foo')
bar = sub.add_parser('bar')
unittest = sub.add_parser('unittest')
unittest.add_argument('command') # Need to add this to make it work.
unittest.add_argument('args', nargs=argparse.REMAINDER)
print(p.parse_args('unittest command -blah blah'.split()))
Output:
Namespace(args=['-blah', 'blah'], cmd='unittest', command='command', verbose=False)
但这不是。似乎首先需要一个“正常”参数:
#!/usr/bin/python
import argparse
p = argparse.ArgumentParser(prog='PROG')
p.add_argument('-v', '--verbose', action='store_true')
sub = p.add_subparsers(dest='cmd')
foo = sub.add_parser('foo')
bar = sub.add_parser('bar')
unittest = sub.add_parser('unittest')
unittest.add_argument('args', nargs=argparse.REMAINDER)
print(p.parse_args('unittest -blah blah'.split()))
Output:
$ /tmp/foo.py
usage: PROG [-h] [-v] {foo,bar,unittest} ...
PROG: error: unrecognized arguments: -blah
I can do print(p.parse_args('unittest -- -f -g'.split()))
,但要求--
有点违背了 argparse.REMAINDER 的目的。
有没有办法得到argparse
做我想做的事?或者我只需要手动解析这个案例?
Python 2.7.5