在Python中处理(可能)可选参数

时间:2009-11-28 04:21:38

标签: python command-line optparse configparser

我正在研究一系列命令行工具,这些工具连接到同一台服务器并执行相关但不同的操作。我希望用户能够拥有一个配置文件,在这里他们可以放置常见的参数,例如可以在所有工具之间共享的连接信息。理想情况下,我想要为我做以下事情:

  1. 如果在命令行指定了服务器地址,请使用此地址并忽略任何其他值
  2. 如果未在命令行指定服务器地址,但是在命令行中指定的配置文件中,请使用此地址。忽略任何其他值。
  3. 如果未在命令行指定服务器地址或在命令中指定的配置文件,但在用户主目录中的配置文件(例如 .myapprc )中可用,则使用此值。
  4. 如果未在上述任何机构中指定服务器地址,则退出并显示错误消息。
  5. 我见过的最接近的是configparse模块,据我所知,它提供了一个选项解析器,它也会查看配置文件,但似乎没有“必须”的概念指定某个“我需要的地方。”

    有没有人知道可以覆盖我上面用例的现有模块?如果没有,我将非常感谢optparse,configparse或我未审核的其他模块的简单扩展。

3 个答案:

答案 0 :(得分:1)

编写此方模块configparse以扩展optparse标准Python库。正如我指出的optparse文档所说,“optparse并不会阻止你实现所需的选项,但也不会给你很多帮助”(尽管后面有几个URL告诉你如何做到这一点) 。最简单的方法是使用default value功能:指定一个实际上不是合法值的默认值(对于像服务器地址这样的东西,这非常简单) - 然后,一旦处理了选项,验证指定的值是否合法(无论如何这是一个好主意! - )并提出适当的例外。

答案 1 :(得分:0)

我已经将opster的中间件功能与SafeConfigParser一起使用,以实现与您要求的相似(但稍微简单)的效果。你必须实现你自己描述的特定逻辑,但它足以帮助你使它相对无痛。 opster中间件使用的一个例子是test/test.py示例。

答案 2 :(得分:0)

使用dict存储程序选项。

首先解析用户目录中的选项文件,并将每个选项存储在dict中(configparse或欢迎任何其他模块)。然后解析命令行(使用你想要的任何模块,optparse可能适合),如果一个参数指定一个配置文件,解析一个dict中的指定文件并从你读到的内容更新你的选项(dict.update真的很方便合并2 dict)。然后将所有其他参数存储到另一个dict中,然后再次合并它们(dict.update再次......)。

这样,您确定存储选项的dict包含您想要的值,该值可以从用户的文件中读取,也可以从指定的配置文件中读取,也可以直接从命令行读取。如果它不包含必需值,则退出并显示错误。