unittestをサブコマンドの1つとして実行できるargパーサを実装したいと思います。引数を盲目的に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
I できprint(p.parse_args('unittest -- -f -g'.split()))
を行うが、敗北の--
種類argparse.REMAINDERの目的を必要とします。
に私がしたいことをする方法はありますか?それとも、このケースを手書きする必要がありますか? 4年前から
のPython 2.7.5
ここで間違った木を吠えていると思います。テストコードをライブラリコードから完全に除外してください。 – wim
それは、他の誰かがそれを変更した場合に、簡単にテストできることを確認するために必要なスタンドアロンのスクリプトです。外部のテストハーネスはそれを達成しません... – rrauenza