【问题标题】:argparse usage with options, not parametersargparse 使用选项,而不是参数
【发布时间】:2016-10-22 00:05:39
【问题描述】:

如果我将一个布尔选项传递给我的脚本,如果提供了该选项,则基本上为 true,否则为 false,我如何使用 argparse 处理它而不是保存值的参数。

例如,我的脚本有一个参数propFile,它包含一个值和一个选项clean,它只是一个真/假标志。用法是

myScript.py --propFile=path/to/my/prop.file -clean

请注意,我尝试通过为前者分配两个破折号和为后者分配一个破折号来区分用户级别的参数和选项,这对解释器来说应该无关紧要。

如果提供了-clean,我想分配scrptVarClean=True,如果没有提供False

我尝试的是:

argparser = argparse.ArgumentParser()
argparser.add_argument('--propFile', help='Properties file path')
argparser.add_argument('-clean', help='Clean?')
args = argparser.parse_args();
propFile = args.props
clean = args.clean

但我得到了

pgCloner.py:错误:参数 -clean:需要一个参数

如何在 argparse 中使用可选的布尔参数?

【问题讨论】:

  • 请注意,通常使用单破折号来表示短版本的标志(例如,-c 表示 --clean);尽管对解释器来说并不重要,但它可能不是 CLI 的使用者所期望的。
  • 我知道,但是对于参数 arg,我只是避免提供较短的版本,以区分
  • 这就是我读到的“我尝试通过为前者分配两个破折号和为后者分配一个破折号来区分用户级别的参数和选项”,我只是说:不要。
  • 这种关于语义的讨论毫无意义。你永远不会有一个单一的约定,就像世界永远不会只说一种语言
  • 如果人们拒绝采用已经存在的并坚持自己编造,当然不会有,但你做到了。

标签: python argparse


【解决方案1】:

如果提供了“--clean”或“-c”,clean 的值将为 True,否则为 False

parser.add_argument('-c', '--clean', action="store_true")

【讨论】:

  • 打败我。非常好。
  • 否则称为“阅读argparse docs”。
  • @MadPhysicist 是的,我注意到了,但这似乎不太好。让我们提供更好的选择...
  • @jatinderjit。这纯粹是口味问题,OP的推理是明智的。
  • 这是个人喜好的问题,正如@MadPhysicist 所说,其中的变化是合理的。至少可以说,试图对像这样的琐碎约定强制执行全球标准是迂腐的。
猜你喜欢
  • 2015-09-28
  • 2015-02-10
  • 2015-12-11
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2023-03-13
  • 2018-12-25
相关资源
最近更新 更多