用于创建分层命令行arg菜单的库。

cmdmenu的Python项目详细描述


命令菜单

cmdmenu是一个基于argparse的简单库,用于自动创建命令行接口 由层次结构级别(如git)组成,并将它们链接到函数。

安装

运行pip install cmdmenu

用法

完整的检查见/examples

添加命令

使用cmdmenu.add_command函数添加命令。

importargparseimportcmdmenudefecho(message):print(message)defmirror_echo(message):print(message[::-1])parser=argparse.ArgumentParser("An example application")subparsers=parser.add_subparsers()cmdmenu.add_command(subparsers,echo)cmdmenu.parse_and_run_with(parser)

像这样跑。

$ python main.py echo Hello
Hello
$ python main.py mirror_echo Hello
olleH

您可以使用 cmdmenu_function装饰器。如果只指定一个参数,它将同时用于这两个参数, 否则,第一条是简短的帮助消息,第二条是说明。

您还可以向函数参数添加字符串注释以生成帮助消息

@cmdmenu.cmdmenu_function("Echo to terminal","Longer description of echo")defecho(message:"Message to echo"):print(message)
$ python main.py --help
usage: An example application [-h] {echo,mirror_echo} ...

positional arguments:
  {echo,mirror_echo}
    echo              Echo to terminal
    mirror_echo       Echo reversed

optional arguments:
  -h, --help          show this help message and exit
$ python main.py echo --help
usage: An example application echo [-h] message

Longer description of echo

positional arguments:
  message     Message to echo

optional arguments:
  -h, --help  show this help message and exit

默认值

cmdmenu尊重参数默认值。如果参数具有默认值,则标志将 为之而生。您可以使用字典注释(见下文)覆盖标志名称 name参数。

@cmdmenu.cmdmenu_function("Print a hello world message")defhello(name=None):ifnameisNone:print("Hello, World!")else:print("Hello, {}".format(name))
$ python main.py hello
Hello, World!
$ python main.py hello --name Ali
Hello, Ali!

更多注释

可以将字典作为参数注释传递,然后将参数传递给argparse。 有关详细信息,请参见add_commanddocstring。

@cmdmenu.cmdmenu_function("Print sum of given numbers")defadd_numbers(numbers:{"help":"Numbers to sum up","nargs":"+","type":int}):print(sum(numbers))
$ python main.py add_numbers 1 2 3
6

添加模块

可以在模块(及其子模块)中使用cmdmenu_function标记的所有函数 使用add_module函数。

您可以将前面示例中的函数保存到my_commands.py中,然后运行以下命令

importargparseimportcmdmenuimportmy_commandsif__name__=="__main__":parser=argparse.ArgumentParser("An example application")subparsers=parser.add_subparsers()cmdmenu.add_module(subparsers,my_commands,toplevel=True)cmdmenu.parse_and_run_with(parser)

这将创建一个相同的程序。toplevel=True参数表示函数 应该直接添加而不创建编辑级别。

默认情况下,add_module添加给定模块的所有子模块,其中包含一个名为 CMDMENU_META

以下结构为 例如:

main.py
fakegit
    __init__.py -> defines add, rm
    remote.py -> defines add rename
    my_addon/
	features -> defines foo, bar
	items -> defines baz

通过将fakegit添加为顶层,可以获得以下命令,每个命令都带有位置和关键字 函数定义的参数:

python main.py add
python main.py rm
python main.py remote add
python main.py remote rename
python main.py my_addon features foo
python main.py my_addon features bar
python main.py items baz

子模块菜单行为和文档可以使用CMDMENU_META字典进行配置。 有关详细信息,请参见add_moduledocstring。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java计时器结束得太早?   java通过行选择编辑jtable内容   java如何将数组的值传递给另一个类?   java对象。hashCode()算法   代号为1且lambda不工作的java Android本机代码   泛型Java方法签名中是否真的需要“?扩展”?   异常处理声纳问题“main”不应“抛出”任何JAVA 7   java无法使用MVEL导入静态方法   java什么是类路径容器?   java从InputStream解码字节   Eclipse重构仅限Java   java使用Qpid通过SSL与AMQP1.0代理通信   java有没有一种方法可以在Oracle中使用带有时区的时间戳作为函数输入   保存文件时运行安卓 lint的java出错   尽管添加了JScrollPane,java JList视图区域仍在增长   java计算第n个浮点   java如何在mysql中插入日期?   GWT中异步回调的java问题