在 Python 中处理命令行选项
发布于:2008年12月2日
我刚刚编写了一小段 Python 代码,用于从数据库内容生成一些报告。其中一个不仅仅是“显示数据”的程序是打印事务日志的程序。它包括各种字段的一些小计和分页输出。
剩下的一个任务是给它一些选项。也就是说,传递一些可以修改报告的标准。具体来说,我想要一个开始和结束日期,以及更改默认排序顺序(即事务日期)的能力。
在直接开始使用蛮力方法处理命令行之前,我决定看看 Python 库中是否有任何有趣的东西可以将此变成更令人愉快的事情。嗯,我找到了好消息,即 optparse 模块。从 O'Reilly 的 Python in a Nutshell 中,我找到了以下描述
optparse
模块提供了丰富而强大的方法来解析用户在启动程序时传递的命令行选项。
听起来不错。我的下一个检查是在 python.org 上,也获得了同样积极的信息。所以,我决定试一试。这是简短的故事(后面跟着一些代码)。
- 首先,您实例化 OptionParser 类。
- 对于您要使用的每个选项,您可以使用 add_option 方法,您可以在其中指定选项(支持短选项和长选项)并告诉 optparse 如何操作。
- 完成所有设置后,您可以使用 parse_args 方法来完成所有繁琐的工作。然后,您可以通过检查属性来检查选项是否存在。
opts = OptionParser() opts.add_option("--start", "-s", help="in format yyyy-mm-dd") opts.add_option("--end", "-e", help="in format yyyy-mm-dd") opts.add_option("--order", "-o", type="choice", choices=["tdate", "cname_id", "account_id", "project_id", "id"], help="tdate|cname_id|account_id|project_id|id") options, arguments = opts.parse_args() if options.start: ... if options.order: ...
这应该足够代码了。每个 opts.add_option(
行都会向列表中添加一个选项。例如,第一个选项表示它匹配 --start
或 -s
。隐含的动作是存储与其关联的参数。help 参数用于指定帮助消息,该消息在调用命令时发生错误或使用 -h
选项调用命令时打印出来。
第三个 opts.add_option(
行略有不同。它将选项的类型定义为 choice,然后包含有效值的列表。输入任何这些值以外的值都会导致错误消息,包括用法显示。
调用 opts.parse_args() 会为您完成繁琐的工作。例如,如果我使用 -s 2008-11-11
调用该程序,则 options.start 将设置为 2008-11-11
。
总而言之,我发现 optparse 很容易理解,并且喜欢将所有错误检查与使用参数分开。它还可以为您做很多其他事情,但这应该可以帮助您入门。它现在在我的“Python 技巧”列表中。