2009-11-28 64 views
1

我正在研究一系列连接到同一服务器并执行相关但不同事情的命令行工具。我希望用户能够拥有一个配置文件,以便他们可以放置通用参数,例如可以在所有工具之间共享的连接信息。理想情况下,我喜欢的东西,它为我以下:在Python中处理(可能)可选参数

  1. 如果在命令行中指定的服务器地址,如果在命令中没有指定的服务器地址使用,而忽略任何其他值
  2. 但是在命令行中指定的配置文件中使用此地址。忽略任何其他值。
  3. 如果服务器地址未在命令行中指定,或者在命令中指定了配置文件,但在用户主目录中的配置文件中可用(例如.myapprc),请使用此值。
  4. 如果服务器地址未在任何上述mechinisms中指定,则会退出并显示错误消息。

我见过这个最接近的是configparse模块,从我可以告诉提供了一个选项解析器,同时也关注了配置文件,但似乎并没有有“必须在规定的概念某处“,我需要。

有谁知道,可以覆盖我上面的用例现有模块的?如果不是的话,那么对optparse,configparse或其他一些我还没有评论的模块的简单扩展也将不胜感激。

+0

你想使用什么类型的配置文件?两种流行的格式是具有扩展XML和INI的文件。 – 2009-11-28 05:56:47

回答

1

这方模块configparse被写入到从标准Python库扩展optparse。正如我指出的optparse文档所言,“optparse并不妨碍您实施所需的选项,但也不会为您提供太多帮助”(尽管它后面有几个URL指示您执行此操作的方法) 。最简单的方法就是使用default value功能:指定一个默认值,它实际上并不是一个合法的值(对于类似于服务器地址的东西,这很容易) - 然后,一旦选项被处理,请验证指定的值是合法的(这是无论如何,这是个好主意!),否则就会引发相应的例外。

0

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

0

使用字典将选项存储到您的程序。

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

这样,你确信你保存的选项字典包含或直接从用户的文件在命令行中读取,从指定的配置文件,或直接所需的值。如果它不包含所需的值,则退出并显示错误。