命令行工具开发

server/2025/2/26 13:09:09/

文章目录

    • 1.argparse
    • 2.subparses
    • 3.优化

后续我也会将我在学习过程中写的脚本放出来。

在开发命令行工具时需要对不同类型的参数进行处理。比如下面这种,我们需要处理用户输入的不同参数。

python">python main.py --help
python main.py domain xxxx
python main.py cms xxx

在这里插入图片描述

1.argparse

使用命令行传入指令时,需要自定义各个命令和命令对应的参数,需要用到库argparse
代码:

python">#python main.py --print 123
#输出:test_one_print+123
import argparsedef test_one():parser = argparse.ArgumentParser(description="test_one")parser.add_argument("--print", help="print", type=str)args = parser.parse_args()if args.print:print(f"test_one_print+{args.print}")else:print("no")if __name__ == '__main__':test_one()

解析:
argparse.ArgumentParser:创建一个argparse对象,后续才可以调用
add_argument:添加一个参数,help是提示信息,type是参数类型
args = parser.parse_args():对命令行的参数解析
args.print:表示–print选项的参数,输入python main.py --print 123,则args.print是123

2.subparses

当程序功能比较复杂时,使用子命令可以使程序命令更加简洁,同时程序的结构更加清晰,维护也更加方便。
首先,一条命令中的参数是可以加可以不加的。比如:

python">完整的命令:
python main.py --print 123 --url www.baidu.com --out-put /etc/test.txt
我们在使用时可以输入:
python main.py --url www.baidu.com

于是我们可以理解为一条主命令有很多个可以选择的参数。
假设现在,我们要做一个程序,需要有两个模块,一个得到用户的id、phone等信息,一个执行其它的问题,同时主命令也要可以打印出信息。写成一条命令就是:

python">python main.py --print 123 --user_num xxx --user_phone xxx .....

这样不仅命令杂乱,程序也会杂乱,这个时候就可以使用子命令。

python">首先我们引入子命令:(可以理解为这里是user模块,还可以添加其它模块)
user_parser = subparsers.add_parser("user",help="info")
然后对每个模块我们需要添加参数处理数据。比如用户有num,phone_num:
user_parser.add_argument("--user_num",help="num",type=str)
user_parser.add_argument("--user_phone",help="user_phone",type=str)

这样我们代码的结构就更加清晰,程序分为不同的功能块,然后每个功能块又有各自的不同参数。

python">#python main.py --print 123 user --user_num 111 --user_phone 123456789
#python main.py --print 123
#python main.py user --user_num 111
import argparsedef test_one():parser = argparse.ArgumentParser(description="test_one")parser.add_argument("--print", help="print", type=str)subparsers = parser.add_subparsers(help='help')user_parser = subparsers.add_parser("user",help="info")user_parser.add_argument("--user_num",help="num",type=str)user_parser.add_argument("--user_phone",help="user_phone",type=str)args = parser.parse_args()if args.print:print(f"test_one_print+{args.print}")if args.user_num:print(f"test_one_print+{args.user_num}")if args.user_phone:print(f"test_one_print+{args.user_phone}")else:print("no")if __name__ == '__main__':test_one()

3.优化

args:
当程序很复杂时,我们可以把程序代码分块,每个文件放一个模块,比如主界面只存放定义的参数,然后参数对应什么功能,放在另一个文件,于是我们可以将args作为参数传递给函数。

python">import argparse
from xxx import opdef test_one():parser = argparse.ArgumentParser(description="test_one")parser.add_argument("--print", help="print", type=str)subparsers = parser.add_subparsers(help='help')user_parser = subparsers.add_parser("user",help="info")user_parser.add_argument("--user_num",help="num",type=str)user_parser.add_argument("--user_phone",help="user_phone",type=str)args = parser.parse_args()op(args)if __name__ == '__main__':test_one()

http://www.ppmy.cn/server/170751.html

相关文章

《Keras 3 使用 PointNet 进行点云分类》:此文为AI自动翻译

《Keras 3 使用 PointNet 进行点云分类》 作者:David Griffiths 创建日期:2020/05/25 最后修改时间:2024/01/09 描述:实现 PointNet for ModelNet10 分类。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 点云分类 介绍 无序 3D 点集(即点云)的分类、检测和分…

《Keras 3 单眼深度估计》:此文为AI自动翻译

《Keras 3 单眼深度估计》 作者:Victor Basu 创建日期:2021/08/30 最后修改时间:2024/08/13 描述:使用卷积网络实现深度估计模型。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介绍 深度估计是从 2D 图像推断场景几何结构的关键步骤。 单眼深度估计的目标是预…

信息系统项目管理师2025年考试关键知识点梳理-第10章 项目进度管理

项目进度管理是为了保证项目按时完成,对项目所需的各个过程进行管理,包括规划进度、定义活动、排列活动顺序、估算活动持续时间、制定项目进度管理计划和控制进度。 1、管理基础 1.1项目进度计划的定义和总要求 项目进度计划提供了项目的详尽计划,说明项目如何以及何时交…

【PDF预览】使用iframe实现pdf文件预览,加盖章

使用iframe实现pdf文件预览&#xff0c;以及在pdf上添加水印。另外还包括批注、打印、下载、缩放、分页等功能 <iframesrc"http://static.shanhuxueyuan.com/test.pdf"width"100%"height"100%"frameborder"0"></iframe>&l…

asp.net core

初始化 WebApplication.CreateBuilder var builder WebApplication.CreateBuilder(args);用于创建一个 Web 应用程序的构建器 (WebApplicationBuilder) 实例。通过这个构建器&#xff0c;你可以配置应用程序的服务和中间件&#xff0c;进而构建和运行你的 ASP.NET Core Web …

Java进阶学习笔记64——IO流

IO流&#xff1a; 输入输出流&#xff0c;就是读写数据的。 IO流的应用场景&#xff1a; 怎么去学习IO流&#xff1f; 1、先搞清楚IO流的分类、体系&#xff1f; 2、再挨个学习每个IO流的作用、用法。 IO流的分类&#xff1a; 按流的方向分为&#xff1a; 按流中数据的最小…

【Docker基础】理解 Docker:本质、性质、架构与核心组件

文章目录 Docker 本质Docker 的引擎迭代Docker 和虚拟机的区别Docker 为什么比虚拟机资源利用率高&#xff0c;速度快&#xff1f;Docker 和 JVM 虚拟化的区别Docker 版本1. LXC (Linux Containers)2. libcontainer3. Moby4. docker-ce5. docker-ee总结&#xff1a; Docker 架构…

C#贪心算法

贪心算法&#xff1a;生活与代码中的 “最优选择大师” 在生活里&#xff0c;我们常常面临各种选择&#xff0c;都希望能做出最有利的决策。比如在超市大促销时&#xff0c;面对琳琅满目的商品&#xff0c;你总想用有限的预算买到价值最高的东西。贪心算法&#xff0c;就像是一…