16.9 总结
我们介绍了如何使用argparse和os.environ来获取命令行参数和配置参数。这是基于第13章“配置文件和持久化”中介绍的技术创建的。
我们可以用argparse实现许多通用的命令行功能。这包含通用功能,例如显示版本号并退出或者显示帮助文本并退出。
我们介绍了用命令设计模式创建可以通过扩展或重构来添加功能的应用程序。我们的目标是显式地保持顶层的主函数体尽可能地精简。
16.9.1 设计要素和折中方案
命令行API是最终应用程序的重要组成部分。尽管我们大多数的精力都花在设计应用程序在运行时的行为,但是我们需要注意两个临界状态:启动和关闭。当我们启动应用程序时,它必须易于配置。同样地,它必须优雅地关闭,正确地刷新所有输出缓冲区并且释放所有的操作系统资源。
当编写公开的API时,我们必须处理模式演化问题的一个变种。由于我们的应用程序一直在演变并且关于用户的信息也在演变,这导致我们会修改命令行 API。这可能意味着我们会有一些旧功能或者旧语法。它可能也意味着我们必须破坏与旧命令行设计的兼容性。
在许多情况下,我们会需要确保主版本号是我们应用程序名称的一部分。我们不应该将顶层的模块命名为someapp,而应该考虑以someapp1开头,这样版本号总是作为应用程序名称的一部分。不应该通过添加版本号作为新后缀的方式修改命令行API,因为以someapp1开始保留了转变到someapp2开始的可能。
16.9.2 展望
在下一章中,我们会扩展一些顶层的设计要素并且介绍模块和包的设计。一个小型的Python应用程序可以作为一个模块,它可以被导入到一个更大的应用程序中。一个复杂的Python应用程序可能是一个包。它可能还包括一些其他的应用程序模块,同时,它也可以被包含到一些更大规模的应用程序中。
