【问题标题】:Boolean argument for script脚本的布尔参数
【发布时间】:2017-08-25 04:02:06
【问题描述】:

在 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')

布尔值是什么?

基本上我想将一个标志传递到我的脚本中,它会告诉脚本是否执行特定操作。

【问题讨论】:

  • action='store_true' 有什么问题?
  • 布尔值你想要什么行为? (比如说,使用 '-v true' 和 '-v false'?)

标签: python


【解决方案1】:

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

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

python myProgram.py --foo

其实我觉得你可能想要的是

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

【讨论】:

  • 我不认为default=False 是必要的。
  • @PaulDraper:显式优于隐式。
  • @PaulDraper 我已经检查过它不是必需的,但您可以将其作为显式值。
  • @PaulDraper 布尔值的默认值不是 True 吗?
【解决方案2】:
parser.add_argument('--foo', action='store_true')

【讨论】:

    【解决方案3】:
    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-optionaction='store_false',一个--optionaction='store_true'

    【讨论】:

    • 最佳选择! -- 它允许放置所有类型的 True/False 指标,例如 True/true/1/Y/y/Yes/yes,如果您尝试放置无效字符串,例如 "BlaBlaBla",则会返回错误
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多