2017年7月15日 星期六

[ Python 常見問題 ] Require either of two arguments using argparse

Source From Here 
Question 
Given: 
  1. import argparse  
  2.   
  3. pa = argparse.ArgumentParser()  
  4. pa.add_argument('--foo')  
  5. pa.add_argument('--bar')  
How do I make at most one of "foo, bar" mandatory: --foo x or --bar y are fine, --foo x --bar y is not? 

How-To 
I think you are searching for something like mutual exclusion. This way, only foo or bar will be accepted, not both: 
* ArgumentParser.add_mutually_exclusive_group(required=False): 
Create a mutually exclusive group. argparse will make sure that only one of the arguments in the mutually exclusive group was present on the command line

For example: 
- test.py 
  1. import argparse  
  2.   
  3. import argparse  
  4.   
  5. parser = argparse.ArgumentParser(description='For testing')  
  6. group = parser.add_mutually_exclusive_group(required=True)  
  7. group.add_argument('--foo', "-f",action='store_true', default=False)  
  8. group.add_argument('--bar', "-b",action='store_true', default=False)  
  9. args = parser.parse_args()  
  10.   
  11. print("foo=%s; bar=%s" % (args.foo, args.bar))  
Then test it this way: 
# ./test.py 
usage: test.py [-h] (--foo | --bar) 
test.py: error: one of the arguments --foo/-f --bar/-b is required
 
# ./test.py -f 
foo=True; bar=False 
# ./test.py -b 
foo=False; bar=True


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...