2012-02-07 58 views
68

在Python中,我了解如何将int和str参数添加到脚本中。脚本的布尔参数

parser=argparse.ArgumentParser(description="""Mydescription""") 
parser.add_argument('-l', type=str, default='info', help='String argument') 
parser.add_argument('-dt', type=int, default ='', help='int argument') 

布尔值是什么?

基本上我想通过一个标志到我的脚本,它会告诉脚本是否执行特定的动作。

+2

出了什么问题'动作='store_true “'? – 2012-02-07 21:10:53

+0

你想用布尔值表达什么行为? (比如用'-v true'和'-v false'?) – kennytm 2012-02-07 21:11:55

回答

133

您可以使用actionstore_true | store_false,或者你可以使用int并让隐式强制检查一个布尔值。

使用action,您不会传递--foo=true--foo=false参数,如果将其设置为true,则只需包含它即可。

python myProgram.py --foo 

事实上,我认为你可能想要的是

parser.add_argument('-b', action='store_true', default=False) 
+0

这很完美。谢谢。 – dublintech 2012-02-07 21:20:36

+6

我不相信'default = False'是必要的。 – 2014-01-20 01:16:31

+19

@PaulDraper:显式比隐式更好。 – sberry 2014-02-28 20:06:43

15
parser.add_argument('--foo', action='store_true') 
2
import distutils.util 
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true') 

实例调用它:

$ ./myscript    # argp.on = 1 
$ ./myscript --on=false  # argp.on = 0 
$ ./myscript --on=False  # argp.on = 0 
$ ./myscript --on=0   # argp.on = 0 
$ ./myscript --on=1   # argp.on = 1 
$ ./myscript -o0   # argp.on = 0 
$ ./myscript -o false  # argp.on == 0 

我应该提到,您可以将参数绑定到本地包装函数,如果你想支持“yes”和“no”等值,可以处理一些其他精确的字符串匹配。你也可以尝试将输入解释为yaml,它可以处理yes/no。我已经一段时间没有这样做,虽然,我想最近我吸用同样dest值互斥参数,一个--no-optionaction='store_false',和一个--optionaction='store_true'