我想實現一個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