【问题标题】:Options with Options with Python argparse?带有 Python argparse 的选项的选项?
【发布时间】:2013-07-06 10:11:19
【问题描述】:

我正在用 Python 编写一个脚本,并使用 argparse 来解析我的参数。该脚本应该从可用对齐器池中比较两个不同的“对齐器”,并且每个对齐器都有一些配置选项。

我希望能够通过以下方式调用我的脚本:

./script.py --aligner aligner1 --param 12 --aligner aligner2 --param 30 --other_param 28

我想摆脱这种结构,其中第一个 --param 选项“属于”第一个 --aligner 选项,第二个 --param 和 --other_param 选项“属于”第二个--aligner 选项。

argparse 是否能够进行这种结构化选项解析?

如果是这样,最好的方法是什么?如果没有,我应该看看另一个库吗?

有没有更好的 UI 设计可以代替这个?

【问题讨论】:

  • 传递给每个对齐器的参数是可选的还是必需的?
  • 对齐器应该能够同时具有必需和可选参数。

标签: python command-line structure argparse


【解决方案1】:

一般来说,我认为您想要的是不可能的,因为您无法将可选参数值关联在一起。也就是说,我看不到如何将--param 12--aligner aligner1 关联起来。

但是。

您可以按如下方式使用argparse

p = argparse.ArgumentParser ()
p.add_argument ("--aligner", action="append", nargs="+")

这将创建多个对齐参数,每个参数至少需要一个参数(对齐名称)。然后,您可以使用额外的编码方案(您可以在解析器的帮助文本中记录该方案)对每个对齐器的参数进行编码。例如,您可以使用以下命令调用您的脚本:

./script.py --aligner aligner1 param=12 --aligner aligner2 param=30 other_param=28

然后,您将每个对齐器的附加参数拆分为 list,再由 '=' 拆分,然后创建 dict。可能使用一组默认参数进行更新。

【讨论】:

  • 我决定使用带有 nargs='*' 的选项,并使用第二个 ArgumentParser 从结果列表中解析子选项,前缀字符为“+”。
猜你喜欢
  • 2016-08-11
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2017-05-24
  • 2011-05-26
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多