例如:
example.py
parser = argparse.ArgumentParser(description="Will take arguments... or none")
parser.add_argument("-a", action="store_true")
parser.add_argument("-b", action="store_true")
parser.add_argument("-c", action="store_true")
parser.add_argument("-d", action="store_true")
args = parser.parse_args()
print args
我希望example.py将a
设置为True
,但前提是:
-a
标志我试过搞乱
parser.set_defaults(a=True, b=False)
和
parser.add_argument("-a", action="store_true", default=True)
但即使我决定使用a
标记,他们也会将True
设置为b
。
答案 0 :(得分:5)
是使用默认值将a设置为True,甚至指定其他参数。这将违反您的第二个要求,以下是一个简单的修复程序,具有天真的条件检查。
parser = argparse.ArgumentParser(description="Will take arguments... or none")
parser.add_argument("-a", action="store_true")
parser.add_argument("-b", action="store_true")
parser.add_argument("-c", action="store_true")
parser.add_argument("-d", action="store_true")
args = parser.parse_args()
if not (args.b or args.c or args.d):
args.a=True
print args
答案 1 :(得分:2)
听起来你想要一个单选按钮'效果 - 只选择其中一种替代方案。一组标志的替代方案将是一个带有选择的参数。
parser.add_argument('flag', choices=['a','b','c','d'], default='a', nargs='?')
您可以在args.flag
中查看结果,该结果将是4个字符串之一。
显然,位置参数被标志所取代,例如-f
。
答案 2 :(得分:1)
我选择了以下解决方案:
parser = argparse.ArgumentParser(description="Will take arguments... or none")
lettergroup = parser.add_mutually_exclusive_group()
lettergroup.add_argument("-a", action="store_const", dest="letter", const="a", default="a")
lettergroup.add_argument("-b", action="store_const", dest="letter", const="b")
lettergroup.add_argument("-c", action="store_const", dest="letter", const="c")
lettergroup.add_argument("-d", action="store_const", dest="letter", const="d")
args = parser.parse_args()
现在,该值存储在args.letter
中。如果未调用任何标记,则args.letter
将具有值a
。如果同时调用两个标志,则解析器将抛出错误。
解决此问题的另一种方法。