2016-04-05 18 views
0

私は単体テストをソースコードに含む単一のPythonファイルを持っています。これは次のように動作します。相互排他的な引数グループ?

parser = argparse.ArgumentParser() 
parser.add_argument('--test', action='store_true', help="Run unit tests and return.") 

args = parser.parse_args() 

if args.test: 
    testsuite = unittest.TestLoader().loadTestsFromTestCase(SanitizeTestCase) 
    unittest.TextTestRunner(verbosity=1).run(testsuite) 

の場合、プログラムは期待通りに動作します。私はこれを全体のsetuptoolsプロジェクトにする必要はありません。それは、それが想定していることを評価するいくつかの単体テストを持つ非常に簡単なスクリプトです。

私は今、他の議論を解析する必要があることを知りました。それは、物事が崩れ始めるところです。 --testは相互に排他的なパラメータであり、--testが渡された場合、他のすべてのパラメータは適用されません。

argparseに相互排他的な引数グループを持たせる方法はありますか?

+1

[相互排他的なグループ](https://docs.python.org/3/library/argparse.html#mutual-exclusion)を見ましたか? – skrrgwasme

+0

'setuptools' projects * do *はpipでインストール(およびアンインストール)できるという利点があります。 –

+0

これらの他の引数はお互いに排他的ですか? – mgilson

答えて

0

mutually exclusive groupメカニズムがありますが、そのグループのすべての引数は相互に排他的です。あなたは言うことができない、--test xorまたは他のいずれか。

しかし、このようなグループは何も深遠なことはしません。 usage行に何らかのマーキングが追加されています(試してみてください)。あなたのユーザー(自分?)が排他性に違反していると文句を言います。

あなたは同じことを自分で行い、微調整することができます。 parserにカスタムusage行を付けることができます。また、解析後に矛盾する値を無視するか、独自のエラーメッセージ(parser.error('dumb user, cant you read ...?'))を作成するかを選択できます。たとえば、args.testTrueの場合、値に関係なく、他のすべての引数を無視できます。

関連する問題