脚本的布尔参数


78

在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
这有什么错action='store_true'
里克·波吉

您想要布尔型的什么行为?(例如,用“ -v true”和“ -v false”?)
kennytm 2012年

Answers:


151

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

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

python myProgram.py --foo

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

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

7
我认为default=False没有必要。
Paul Draper 2014年

24
@PaulDraper:显式优于隐式。
sberry

@PaulDraper我已经检查过不需要它,但是您可以将其作为显式值。
Caumons 2014年

@PaulDraper不是布尔True的默认值吗?
Aerin


7
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,也可以处理是/否。我已经有一段时间没有这样做了,最近我想我已经吸取了具有相同dest值的互斥参数,一个--no-option带有action='store_false',另一个--option带有。action='store_true'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.