脚本的布尔参数

dub*_*ech 74 python

在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')
Run Code Online (Sandbox Code Playgroud)

什么是布尔人?

基本上我想在我的脚本中传递一个标志,告诉脚本是否要执行特定的操作.

sbe*_*rry 146

您可以使用actionwith store_true| store_false,或者你可以使用int并让隐式转换检查一个布尔值.

使用the action,你不会传递一个--foo=true--foo=false参数,如果它被设置为true,你只需要包含它.

python myProgram.py --foo
Run Code Online (Sandbox Code Playgroud)

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

parser.add_argument('-b', action='store_true', default=False)
Run Code Online (Sandbox Code Playgroud)

  • @PaulDraper:明确比隐含更好. (22认同)
  • 我不相信`default = False`是必要的. (6认同)

Ned*_*der 17

parser.add_argument('--foo', action='store_true')
Run Code Online (Sandbox Code Playgroud)


Tho*_*ner 8

import distutils.util
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true')
Run Code Online (Sandbox Code Playgroud)

调用它的示例:

$ ./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
Run Code Online (Sandbox Code Playgroud)

我应该提到,如果你想支持像“yes”和“no”这样的值,你也可以将参数绑定到本地包装函数,以处理其他一些精确的字符串匹配。您还可以尝试将输入解释为 yaml,它也可以处理是/否。不过,我有一段时间没有这样做了,我想最近我很讨厌具有相同dest值的相互排斥的论点,一个--no-optionaction='store_false',一个--optionaction='store_true'