跳转到主要内容

为忙碌的开发者提供命令行程序

项目描述

概述

懒惰 人类提供的命令行程序。

  • 装饰一个函数作为程序的起始点。

  • 基于函数签名生成命令行解析器。

  • 在系统环境中搜索选项默认值。

Latest PyPI version Current build status Latest PyPI version

为什么选择Begins?

我经常用Python编写很多小型程序。这些程序通常只接受少量简单的命令行参数。在每一个小程序中都编写命令行解析代码不仅打断了我的思路,还极大地增加了我需要编写的代码量。

Begins的实现是为了从这些Python程序中移除样板代码。它并不打算取代大型应用程序所需的丰富命令行处理。

要求

对于早于Python 3.3的Python版本,需要从Python包索引中的funcsigs包。

对于Python 2.6版本,还需要从Python包索引中的argparse包。

这两个依赖项都已列在包配置中。如果您使用Pip安装begins,则所需的依赖项将自动安装。

安装

开始安装 可从 Python 包索引 下载。要使用 Pip 安装

$ pip install begins

或者,可以直接从 Github 安装最新开发版本。

$ pip install git+https://github.com/aliles/begins.git

请注意,开始安装 目前仍处于 alpha 阶段,因此 API 或行为可能会更改。

设置程序的起始点

begin.start() 函数可以用作函数调用或装饰器。如果作为函数调用,当从 __main__ 模块调用时返回 True。为此,它会检查调用者的堆栈帧,检查全局的 __name__

这允许以下 Python 模式

>>> if __name__ == '__main__':
...     pass

被替换为

>>> import begin
>>> if begin.start():
...    pass

如果用作装饰器来注释一个函数,当通过检查当前堆栈帧确定定义在 __main__ 模块中时,将调用该函数。任何跟随装饰器函数的定义都不会在函数调用完成后创建。

begin.start() 作为装饰器的用法如下

>>> import begin
>>> @begin.start
... def run():
...     pass

通过将函数执行推迟到模块其余部分加载完毕之后,确保主函数不会因为依赖于稍后代码中定义的内容而失败。

解析命令行选项

如果 begin.start() 装饰的函数接受参数,begin.start() 将处理命令以传递作为那些参数的选项

>>> import begin
>>> @begin.start
... def run(name='Arther', quest='Holy Grail', colour='blue', *knights):
...     "tis but a scratch!"

上述装饰函数将生成以下命令行帮助

usage: example.py [-h] [-n NAME] [-q QUEST] [-c COLOUR]
                  [knights [knights ...]]

tis but a scratch!

positional arguments:
  knights

optional arguments:
  -h, --help            show this help message and exit
  -n NAME, --name NAME  (default: Arther)
  -q QUEST, --quest QUEST
                        (default: Holy Grail)
  -c COLOUR, --colour COLOUR
                        (default: blue)

在 Python3 中,任何 函数注释 都成为命令行选项的帮助。例如

>>> import begin
>>> @begin.start                                         # doctest: +SKIP
... def run(name: 'What, is your name?',
...         quest: 'What, is your quest?',
...         colour: 'What, is your favourite colour?'):
...     pass

将生成如下命令帮助

usage: holygrail_py3.py [-h] -n NAME -q QUEST -c COLOUR

optional arguments:
  -h, --help            show this help message and exit
  -n NAME, --name NAME  What, is your name?
  -q QUEST, --quest QUEST
                        What, is your quest?
  -c COLOUR, --colour COLOUR
                        What, is your favourite colour?

命令行解析支持

  • 位置参数

  • 关键字参数

  • 默认值

  • 可变长度参数

  • 注释

命令行解析不支持可变长关键字参数,通常写作 **kwargs。如果装饰函数使用可变长关键字参数,将引发异常。

如果参数没有默认值,则命令行未传递值会导致程序运行时打印错误并退出。

对于具有大量选项的程序,可能更喜欢仅使用长选项。要抑制短选项,请将 begin.start 装饰器的 short_args 关键字参数传递为 False

>>> import begin
>>> @begin.start(short_args=False)
... def run(name='Arther', quest='Holy Grail', colour='blue', *knights):
...     "tis but a scratch!"

该程序不接受 -n-q-c 作为选项名称。

类似地,大量命令行选项可能按字母顺序显示更好。可以通过将 lexical_order 传递为 True 来实现这一点

>>> import begin
>>> @begin.start(lexical_order=True)
... def main(charlie=3, alpha=1, beta=2):
...     pass

该程序将按 alphabetacharlie 的顺序列出命令行选项,而不是按函数接受的顺序。

进一步阅读

本指南的其余部分、教程和 API 文档都是官方 开始安装 文档的一部分,这些文档托管在 Read The Docs 上。

问题

任何错误报告或功能请求都可以通过 GitHub 的 问题系统 进行。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源代码分发

begins-0.9.tar.gz (678.2 kB 查看哈希值)

上传时间 源代码

构建分发

begins-0.9-py2-none-any.whl (27.2 kB 查看哈希值)

上传时间 Python 2

由以下提供支持