Python Cli 编写指南
Python Cli 编写指南
python实现cli
环境:
- python 3.8
库
- python自带argparse
指南
简单示例 : cli.py
import argparse
def cli():
parser = argparse.ArgumentParser(description='CLI描述')
subparsers = parser.add_subparsers(metavar='子命令')
# 添加子命令,演示没有参数
one_parser = subparsers.add_parser('one', help='第一个命令')
one_parser.set_defaults(handle=handle_one)
# 解析命令
args = parser.parse_args()
# 1.第一个命令会解析成handle,使用args.handle()就能够调用
if hasattr(args, 'handle'):
args.handle(args)
# 2.如果没有handle属性,则表示未输入子命令,则打印帮助信息
else:
parser.print_help()
def handle_one(args):
print('handle_one')
if __name__ == '__main__':
cli()
调用:
$ python cli.py
usage: cli_1.py [-h] 子命令 ...
CLI描述
positional arguments:
子命令
one 第一个命令
optional arguments:
-h, --help show this help message and exit
$ python cli.py one
handle_one
增加第二个命令
import argparse
def cli():
parser = argparse.ArgumentParser(description='CLI描述')
subparsers = parser.add_subparsers(metavar='子命令')
# 添加子命令,演示没有参数
one_parser = subparsers.add_parser('one', help='第一个命令')
one_parser.set_defaults(handle=handle_one)
# 添加子命令,演示有参数
two_parser = subparsers.add_parser('two', help='第二个命令')
# 参数(简写,全称,类型,是否必填,帮助说明)
two_parser.add_argument('-s', '--str', type=str, required=True,
help='一个字符串类型参数')
# 参数(简写,全称,类型,默认值,帮助说明)
two_parser.add_argument('-d', '--default', type=str, default='默认值',
help='这个命令有默认值')
# 参数(简写,全称,类型,帮助说明)
two_parser.add_argument('-ts', '--the-str', type=str,
help='当全称有横线时,属性名转换为下划线,即 the_str')
two_parser.set_defaults(handle=handle_two)
# 解析命令
args = parser.parse_args()
# 1.第一个命令会解析成handle,使用args.handle()就能够调用
if hasattr(args, 'handle'):
# 1.1.其他参数会被解析成args的属性,以命令全称为属性名
args.handle(args)
# 2.如果没有handle属性,则表示未输入子命令
else:
parser.print_help()
def handle_one(args):
# 无参数
print('handle_one')
def handle_two(args):
print('handle_two')
print(f'str:{args.str}')
print(f'default:{args.default}')
print(f'the-str:{args.the_str}')
if __name__ == '__main__':
cli()
- 调用:
$ python cli.py
usage: cli.py [-h] 子命令 ...
CLI描述
positional arguments:
子命令
one 第一个命令
two 第二个命令
optional arguments:
-h, --help show this help message and exit
- 调用one不受影响
$ python cli.py one
handle_one
- 调用two会显示需要必填项-s
$ python cli.py two
usage: cli.py two [-h] -s STR [-d DEFAULT] [-ts THE_STR]
cli.py two: error: the following arguments are required: -s/--str
- 输入-h查看帮助
$ python cli.py two -h
usage: cli.py two [-h] -s STR [-d DEFAULT] [-ts THE_STR]
optional arguments:
-h, --help show this help message and exit
-s STR, --str STR 一个字符串类型参数
-d DEFAULT, --default DEFAULT
这个命令有默认值
-ts THE_STR, --the-str THE_STR
当全称有横线时,属性名转换为下划线,即 the_str
- 输入-s参数(或全称--str)
- 可以看到加了默认值的会显示默认值
- 没默认值且非必填项值为None
$ python cli.py two -s 哈哈
handle_two
str:哈哈
default:默认值
the-str:None
- 输入有默认值的参数-d (或全称--default)
- 输入的值会覆盖默认值
$ python cli.py two -s 哈哈 --default 改了
handle_two
str:哈哈
default:改了
the-str:None
- 输入所有参数
$ python cli.py two -s 哈哈 --default 改了 -ts 赋值了
handle_two
str:哈哈
default:改了
the-str:赋值了
其他代码使用
在"setup.py"文件中
import setuptools
setuptools.setup(
# 省略其他参数
entry_points={
'console_scripts': [
'my-cli = my.cli:cli'
]
}
)
- 'my-cli = my.cli:cli'就是替换内容
- 'my-cli'
- 上传pypi后,拉取这个库,就能够使用'my-cli'来调用cli
- 如'my-cli one' / 'my-cli two -h'
- 'my.cli:cli'
- '完整类名:方法名'
- 目录结构如下方结构
- cli命令需要放在模块下
- 不能放在根目录下,否则会报错找不到模块
- 'my-cli'
文件目录结构:
root
- my
- __init__.py
- cli.py
参考资料:
Python Cli 编写指南的更多相关文章
- python 函数编写指南
#函数编写指南:1.给函数指定描述性名称,且只在其中是用小写字母和下划线 2.每个函数都应包含简要的阐述其功能的注释,该注释应紧跟在函数定义后面,且采用文档字符串格式 3.给形参指定默认值时,等号两边 ...
- SecureCRT中python脚本编写
SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是Secu ...
- 基于Asterisk的VoIP开发指南——(2)Asterisk AGI程序编写指南
原文:基于Asterisk的VoIP开发指南--(2)Asterisk AGI程序编写指南 5. Asterisk AGI程序编写指南 5.1概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或 ...
- Python 内编写类的各种技巧和方法
Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...
- PEP 8 - Python代码样式指南
PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...
- Python 编码风格指南
原文:http://python.jobbole.com/84618/ 本文超出 PEP8 的范畴以涵盖我认为优秀的 Python 风格.本文虽然坚持己见,却不偏执.不仅仅涉及语法.模块布局等问题,同 ...
- Effective Python之编写高质量Python代码的59个有效方法
这个周末断断续续的阅读完了<Effective Python之编写高质量Python代码 ...
- Python中编写类的各种技巧和方法
简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...
- Python开发人员指南
本指南是一个全面的资源贡献 给Python的 -为新的和经验丰富的贡献者.这是 保持由维护的Python同一社区.我们欢迎您对Python的贡献! 快速参考 这是设置和添加补丁所需的基本步骤.了解基础 ...
- PEP8中文版 -- Python编码风格指南
Python部落组织翻译, 禁止转载 目录 缩进 制表符还是空格? 行的最大长度 空行 源文件编码 导入 无法忍受的 其 ...
随机推荐
- 分析网络工具 Wireshark与tcpdump
一.安装使用 1. 安装 2. 选择网卡:我们的主机就是通过其中一块网卡和其他主机进行数据交互: 3. 点击开始:打开wireshark,点击左上角那个蓝色的鲨鱼鳍按钮,开始捕获新的分组并清空之前的分 ...
- CF14D题解
CF14D Two Paths题解 题目链接 传送门 题意简述 给定一棵树,找出两条不经过相同点的最长路径,使得他们的长度乘积最大. 题目分析 首先,如果在一棵树上,两条路径没有共同的点,那么这两条路 ...
- 配置python库源为清华源
目录 Windows Ubuntu pip较低版本 pip较高版本 Windows %HOMEPATH%/pip/pip.ini [global] index-url = https://pypi.t ...
- 【ML】序
以下序言,没有什么实质性内容 搞车需要,头铁开个Machine Learning栏目,希望能长更.
- mysql(insert + str_to_date)
str_to_date(date_str, '%Y-%m-%d %H:%i:%s') 替换为 substring_index(date_str, '.', 1); str_to_date(date_s ...
- 2.5 OpenEuler 中C与汇编的混合编程
2.5 OpenEuler 中C与汇编的混合编程 任务详情 在X86_64架构下实践2.5中的内容,提交代码和实践截图 把2.5的内容在OpenEuler中重新实践一遍,提交相关代码和截图 任务一x8 ...
- Jquery 简单实现demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue element ui table 自动无限滚动组件
<template> <el-table class="tableList" ref="rw_table" hei ...
- thinkphp6+composer+无集成工具 配置php项目环境
安装composer 下载地址:https://getcomposer.org/Composer-Setup.exe 安装步骤 点击finish完成即可. 打开cmd输入composer查看是否安装成 ...
- UART4模板
#define UART4_Bps 9600 #define UART4_RecSize 20 uchar UART4_RecData[UART4_RecSize];uchar UART4_Loc; ...