我想实现一个arg解析器,它允许我将unittests作为子命令之一运行,将参数盲目地传递给unittest.main()。例如,在解析器/子语法分析器开始时使用argparse.REMAINDER
$ 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()))
输出:
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()))
输出:
$ /tmp/foo.py
usage: PROG [-h] [-v] {foo,bar,unittest} ...
PROG: error: unrecognized arguments: -blah
我可以做print(p.parse_args('unittest -- -f -g'.split()))
,但要求--
那种失败的argparse.REMAINDER的目的。
有没有办法让做我想做的事?或者我只是需要手解析这种情况?
的Python 2.7.5
我想你在这里吠叫错了树。完全保留测试代码不在库代码中。 – wim
这是一个独立的脚本,我需要确保可以轻松测试以防其他人修改它。外部测试工具无法完成... – rrauenza