用于创建分层命令行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_command
docstring。
@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_module
docstring。