功能超级强大,Python 命令行解析工具 argparse很好用

news2024/9/22 11:25:59

在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse。这里面功能最强大的莫过于 argparse,下面就来看看它用法。

import argparse  
  
# 使用 argparse 分为以下几步  
# 1. 创建命令行解析器对象  
parse = argparse.ArgumentParser(  
    description="这是命令行解析器"  
)  
  
# 2.给解析器添加命令行参数,可以添加任意个  
parse.add_argument("-n", dest="name")  
  
# 3. 从命令中将参数解析出来  
args = parse.parse_args()  
  
# 然后通过 args 便可以拿到相应的参数值  
print(args.name)

我们执行一下看看,当前文件叫做 tools.py。

技术提升

本文由技术群粉丝投稿分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN +研究方向
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

怎么样,是不是很简单呢?所以我们的重点就在 add_argument 方法上面,来看看它都支持哪些参数。

import argparse  
  
parse = argparse.ArgumentParser()  
  
# 这里出现了 "-n" 和 "--name"  
# 在命令行中可以通过 '-n 古明地觉' 或者 '--name 古明地觉' 进行指定  
# 两者的含义是一样的,但 - 后面一般跟短参数,-- 后面跟长参数  
# 然后是 dest,它表示获取相关参数值时,使用的名称  
parse.add_argument("-n", "--name", dest="name")  
# 这里只有一个短参数,那么在命令行中需要通过 -a 来指定  
parse.add_argument("-a", dest="age")  
# 这里只有一个长参数,那么在命令行中需要通过 --gender 来指定  
parse.add_argument("--gender", dest="gender")  
  
args = parse.parse_args()  
  
print(f"name: {args.name}, age: {args.age}, gender: {args.gender}")

我们来试一下:

还是很简单的,一个 - 后面跟的是短参数,两个 - 后面跟的是长参数。在命令行中通过 - 或者 – 进行指定,解析完毕之后再通过 dest 参数指定的名字进行获取。

另外,虽然 - 后面跟短参数,-- 后面跟长参数,但我们这样写也是可以的。

parse.add_argument("-name", "--n", dest="name")

只不过这种写法比较怪异,应该写成 --name 和 -n,一个横杠后面是短参数,两个是长参数。

然后这些参数都是可以不指定的,会使用默认值 None。

如果我希望它是必传参数,该怎么办呢?

import argparse  
  
parse = argparse.ArgumentParser()  
  
parse.add_argument("--host", dest="host", required=True)  
parse.add_argument("-p", dest="port", default=6379)  
  
args = parse.parse_args()  
  
print(f"host: {args.host}, port: {args.port}")

我们看到当 host 不指定的时候,就会报错。并且我们还通过 default 参数指定了默认值。

然后是参数值的类型,不管什么参数,只要我们在命令行当中传递了,那么解析出来的默认都是字符串类型。

import argparse  
  
parse = argparse.ArgumentParser()  
  
parse.add_argument("-p", dest="port", default=6379)  
  
args = parse.parse_args()  
  
print(f"port 类型: {args.port.__class__}")

那么可不可以指定参数的类型呢?答案是可以的。

import argparse  
  
parse = argparse.ArgumentParser()  
parse.add_argument("-p", dest="port", type=int)  
args = parse.parse_args()  
  
print(f"port 类型: {args.port.__class__}")

通过指定 type 为 int,那么在将参数值解析出来之后就会调用 int 进行转化,转化失败则报错。

同理,我们也可以换成其它类型,举个例子。

还是很简单的,甚至换成我们自定义的类,或者一个函数也是可以的,

此时我们就实现了给一个参数传递多个值,不过这种做法属于是曲线救国,我们应该通过另一个参数实现。


nargs 指定为 *,那么表示 --hobby 可以接收多个值,并且值之间使用空格进行分隔,最终会得到一个列表。如果指定 --hobby,但是不传值,那么会得到空列表。

以上就是 argparse 的基本用法,更多内容可以参考官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java+SSM在线商城系统电商购物系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架:Spring、SpringMVC、MyBatis UI界面:BootStrap、jQuery 、JSP 数据库:MySQL 系统分为前台订票和后台管理: 1.前台商城 商品分类展示、商品详情、商品推荐、购物车、下单、支付 客…

课题设计基于nodejs购票系统的设计与实现.zip(论文+源码+ppt文档+视频录制)

第 1 章 绪 论 3 1.1研究现状及存在问题 3 1.2主要工作 4 第 2 章 系统开发技术概述 5 2.1 B/S 架构模式与C/S 架构模式 5 2.2 nodejs框架模式 6 第 3 章 需求分析 7 3.1 系统情况概述 7 3.2 系统功能性需求分析 9 3.3 系统非功能性需求分析 9 3.4 系统用例图 10 第 4 章 系统设…

【JavaSE】文件读写

目录 一、文件 1、文件的概念 1.广义 2.狭义 二、路径 1、绝对路径 2、相对路径 1.进入下一级./ 2.回退上一级../ 三、Java里的文件基本操作----File类 1、说明 2、File类的基本操作 1.基本方法 ​2.创建与删除文件 3.创建目录 4.文件的重命名 四、文件的读写操…

信息安全技术

安全分析模型自动化调优 MLOps(Machine Learning Operations)是一种人工智能 的工程实践,是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化,支持ML 模型的发布、激活、监控、性能跟踪…

【Spring Cloud】Nacos命名空间Namespace的介绍与使用

本期目录1. Namespace介绍2. 创建Namespace3. 配置Namespace专栏精选文章1. Namespace介绍 Namespace 通常用来做环境隔离。例如开发环境 dev 、测试环境 test 和生产环境 pro 之间的服务/数据相互隔离,无法相互访问。 Nacos 中服务和数据存储的最外层都是 Namespa…

常用性能测试工具的比较

目录性能测试的重要性针对接口的性能测试性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具参考总结性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用,尤其是对于互联网产品这种具有大用户量,大数据量&#…

Spring Boot学习篇(一)

Spring Boot学习篇(一) 1 Spring、SpringBoot、SpringCloud有什么区别? spring一般指Spring框架(SpringFramework),它是一个开源、轻量级的Java应用开发框架。其核心是控制反转IOC和面向切面编程AOP。Spring提供了很多包括ORM、…

Kaggle 新赛 | GoDaddy 微型企业密度预测

文章目录一、比赛背景和目标1. 背景2. 比赛目标二、提交、时间线和奖项三、代码要求一、比赛背景和目标 1. 背景 美国政策领导人努力发展更具包容性和抗衰退能力的经济体。他们也意识到,随着科技的进步,创业从来没有像今天这样容易。无论是创造一个更合…

【阙值分割】粒子群算法自适应多阈值图像分割【含Matlab源码 1459期】

⛄一、粒子群算法自适应多阈值图像分割简介 理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 粒子群优化的多阈值图像自分割算法 ⛄二、部分源代码 clc;clear;close all; %% 输入图像; Imag imread(‘24063.jpg’);%29…

【算法】常见的排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序)

目录一.常见排序类型二.排序详解1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序6.归并排序一.常见排序类型 插入排序:插入排序、希尔排序选择排序:简单选择排序、堆排序交换排序:冒泡排序、快速排序归并排序基数排序(又叫桶排序)八万个…

Java项目:新闻推荐管理系统(java+SSM+JavaScript+Ajax+Mysql)

源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目新闻推荐管理系统; 前台: 登录、首页、全部新闻、系统特色、猜你喜欢、分类、评论 后台: (1)文件管理:文件列表。 &#x…

3.无重复字符的最长子串

原题:https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 目录 题目描述 题解 代码实现 题目描述 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入:s "…

微型计算机技术及应用笔记

微型计算机概述 主机系统包括: CPU存储器输入输出接口总线CPU包括: 运算器(ALU)控制器(CU)寄存器组(Register)寄存器:通用寄存器、专用寄存器 控制器由指令寄存器、指令…

攻防世界——Web新手练习区

目录 view_source get_post robots ​backup cookie disabled_button simple_js xff_referer weak_auth command_execution simple_php view_source 知识点: 查看网页源代码的几种方式: 按F12键,点击elements可以查看源代码快捷…

《图解TCP/IP》阅读笔记(第六章 6.1、6.2)—— 传输层的作用、端口号

第六章 TCP与UDP TCP与UDP和赫赫威名,在此前几章已略有耳闻。 TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。 首先,我们先来回顾一下传输层的定义。 上一章中提到过,IP中有一个协议字段&#x…

猿如意|程序员的如意神器之【chat GPT】测评。

chat GPT测评1、使用感受2、功能展示3、期待优化地方3.1 猿如意网页版搜索功能3.2 chat GPT3.2.1 测试抢券才能体验3.2.2 聊天体验1、使用感受 首先,需要对猿如意进行点赞。 正如宣传语所说,猿如意,程序员的的如意兵器,这句话&am…

[附源码]Node.js计算机毕业设计个性化旅游线路推荐系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

WordCloud库简介与使用示例

今天继续给大家介绍Python相关知识,本文主要内容是WordCloud库简介与使用示例。 一、WordCloud库简介与安装 WordCloud是一款Python的第三方库,可以用于生成词云。词云可以以词语为基本单位,然后根据词语的出现频率确定词语的大小&#xff…

linux red hat 8.0 root密码破解

简介: root用户是linux用户最大权限的用户,如果不慎将其密码忘记是不可直接更改的,只能通过破解的方式来重置root密码。 linux系统的启动过程: 1 开机自检(POST),初始化部分硬件 2 搜素可用…

嵌入式从业者应知应会知识点 - 索引

大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家介绍的是嵌入式从业者应知应会知识点。 嵌入式开发需要掌握的知识点非常多,不同的技术方向有不同的知识侧重点,本系列试图整理总结嵌入式开发(尤其是软件&a…