これは、異なる視点からの回答ですが、Setting default option in Python of two mutually exclusive options using the argparse moduleと似ています。相互排他的な別の引数がtrueの場合は、デフォルトをfalseに設定します
コードブロックは、(パーサはargparse.ArgumentParserのインスタンスである):
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_true",
dest="show", default=True)
mutex_group.add_argument("--insert", action="store_true",
dest="insert")
opts = parser.parse_args()
どちら--show
または--insert
は私が(それゆえdefault=True
)--show
をデフォルトにしたい指定されている場合が、--insert
ならば、opts.show
はまだ使用されています相互に排他的なブロックの一部であるにもかかわらず、(デフォルトのために)trueを設定します。
opt.show
がTrueであるかどうかをテストするときに、他の選択肢のどれも設定されていない現在のコードをチェックし、すなわち:
if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()
が、これはあなたが相互に排他的に--delete
を追加するときに何が起こるか(スケールしませんグループなど)私は他のすべての変数をopts.show
falseにするためのより良い方法を探していますが、それはまだデフォルトとして持っています。
argparseのドキュメントを読むと、私はカスタムアクションが行く方法だと思うが、そこから相互排他的なグループの他のメンバーにアクセスする方法を見ることができないと思う。残りのいずれかが設定されている場合はデフォルトを反転します)。 もう1つのオプションは、if条件を逆にすることですが、それは不正です(デフォルトが変更された場合、if文の順序も変更する必要があります)。