2012-06-22 41 views
98

Verilen kullanarak gerektir:iki bağımsız değişken ya argparse

import argparse 

pa = argparse.ArgumentParser() 
pa.add_argument('--foo') 
pa.add_argument('--bar') 

print pa.parse_args('--foo 1'.split()) 

nasıl yaparım "foo, bar" zorunlu ait

  • yapmak en az bir: --foo x, --bar y ve --foo x --bar y gayet
  • "foo, bar" dan en az birini yapın: --foo x veya --bar y iyi, --foo x --bar y
+0

olası yinelenen [python argparse birleşimsel seçenekleri kodlamak için nasıl] (http://stackoverflow.com/questions/5603364/how-to-code-argparse-combinational-options-in-python) – robert

cevap

152

Sanırım mutual exclusion (en azından sorunuzun ikinci kısmı için) gibi bir şey arıyorsunuz. Bu şekilde, her ikisine de değil, yalnızca foo veya bar kabul edilecektir.

group = parser.add_mutually_exclusive_group(required=True) 
    group.add_argument('--foo',action=.....) 
    group.add_argument('--bar',action=.....) 
    args = parser.parse_args() 

Gerçekten de sorunun ilk bölümünü Christian Witts'un cevabıyla çözebilirsiniz. Her ikisini birleştirerek, istediğinizi elde edebilmelisiniz.

BTW, another question aynı türden bir soruna atıfta bulundu.

Umut bu modülü tarafından sağlanan değil bazı çek gerekirse her zaman elle yapabilirsiniz

+0

Bu kadar kolay olduğunu asla tahmin edemezdim! Seni seviyorum Python 3.6! – bjd2385

20

yardımcı olur: bir

pa = argparse.ArgumentParser() 
... 
args = pa.parse_args() 

if args.foo is None and args.bar is None: 
    pa.error("at least one of --foo and --bar required")