argparse基本功能极简介绍

python脚本文件可以通过命令行的方式调用,在这种调用方法中,可以通过sys.argv来把命令行参数传入脚本文件,通过这种方式传入的参数是string,并且需要将该参数进行一定的转换,赋值才可以使用。那有没有一种方法可以直接将传入的参数放入脚本的命名空间,并且传入后就是python的原生类型(比如函数,list等),而不是string?

python 内置模块argparse就是这个问题的答案,另外,它还可以自动的产生help和usage信息,以及发布error信息。运用该模块的流程是:(1)创建一个parser (2)为该parser增添参数 (3)用parser_args方法将参数分发。

  • 一个小例子

创建一个名叫prog.py的脚本文件,内容如下:

import argparse
parser=argparse.ArgumentParser(description='Process some integers') #创建parser 对象
parser.add_argument('integers',metavar='N',type=int,nargs='+', #添加参数
help='an integer for the accumulator')
parser.add_argument('--sum',dest='accumulate',action='store_const',const=sum,
default=max,
help='sum the integers(default:find the max)')
args=parser.parse_args() #分发参数
print(args.accumulate(args.integers)) #输出来自参数accumulate

命令行输入:

$ python prog.py -h

usage: prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
N an integer for the accumulator optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max) $ python prog.py 1 2 3 4 4 $ python prog.py 1 2 3 4 --sum 10

解读这个例子:

首先创建ArgumentParser实例,可选参数description可以在命令行输入 python prog.py -h,显示出描述信息'Process some integers'。

然后通过函数add_argument分别添加位置参数'integer',可选参数'sum'('--'或'-'表明为可选参数);

可选参数metavar将得到的帮助信息里integers参数显示为'N',但不改变传入脚本文件的参数名,即参数名仍未integer

可选参数type,可取这样一个对象,它可被调用,返回进行转换过的值。本例中为int,故传入的'integers'参数将被转换为整数;

可选参数nargs,该参数将多个命令行参数与单一的动作(action)连结起来,本例为'+',表明所有命令行参数被装入一个list,必须保证至少该参数有一个被传入,否则报错;

可选参数dest,决定了传入的参数名。本例中,--sum传入脚本的参数为'accumulate';

可选参数action,将动作和命令行参数联系起来,本例中,'store_const',把const标明的参数(本例为sum函数句柄)储存起来,赋值给参数,所以在这里当命令行中出现--sum,就将变量accumulate=sum传入脚本文件;

可选参数const,与其他动作配合使用,本例中与action='store_const'配合;

可选参数default,规定了argparser中的可选参数(如本例中--sum),如果不出现,其默认值,本例中为max,即--sum如果不出现在命令行中,则为max.

最后,在脚本中,parse_args可以没有参数的被调用,ArgumentParser将会自动的判定来的命令行的参数;

传入的参数名是创建parser的属性名,相应的参数值就是parser的属性名的属性值;如本例传入的accumulate是个函数句柄,则parser.accumulate就得到了该句柄(如果是--sum缺省就是max,如果有--sum就是sum),parser.integers就是integers传入的值。

更多参数及用法详见python官方文档。

argparse基本功能极简介绍的更多相关文章

  1. 3星|《AI极简经济学》:AI的预测、决策、战略等方面的应用案例介绍

    AI极简经济学 主要内容是AI的各种应用案例介绍.作者把这些案例分到五个部分介绍:预测.决策.工具.战略.社会. 看书名和介绍以为会从经济学的角度解读AI,有更多的新鲜的视角和观点,读后比较失望,基本 ...

  2. Vim,极简使用教程,让你瞬间脱离键鼠切换的痛苦

    注:看大家对Vim仇恨极大,其实它只是一种文本操作方式,可以减少键鼠的切换,从而让编辑文本的操作更迅捷.并不等同于IDE,在我看来,它们是两个是包含关系,IDE可以有Vim编辑模式.Vim或许可以通过 ...

  3. 在Web应用中接入微信支付的流程之极简清晰版

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  4. 在Web应用中接入微信支付的流程之极简清晰版 (转)

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  5. Resty 一款极简的restful轻量级的web框架

    https://github.com/Dreampie/Resty Resty 一款极简的restful轻量级的web框架 开发文档 如果你还不是很了解restful,或者认为restful只是一种规 ...

  6. 极极极极极简的的增删查改(CRUD)解决方案

    去年这个时候写过一篇全自动数据表格的文章http://www.cnblogs.com/liuyh/p/5747331.html.文章对自己写的一个js组件做了个概述,很多人把它当作了一款功能相似的纯前 ...

  7. ServiceFabric极简文档-0. ServiceFabric简介

    前言: 最近ServiceFabric开源了,大家热情都比较高,官方文档大而全,但快速入手不容易找到头绪.发几篇极简的文档,跟大家分享一下,顺便为Ray的ServiceFabric部署做一下铺垫.因为 ...

  8. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  9. 首发:极简的Centos主机监控方法,分分钟即可使用【转】

    需求天天有,今年事更多.硬盘测试刚刚完成,就又来了性能监控的需求.一般我们生产就用zabbix了,用起来还行,就是蛮多脚本要写.开发和测试都是分散的,经常还要重装系统,用zabbix就算了,开发和测试 ...

  10. Mongodb极简实践

    MongoDB 极简实践入门 1. 为什么用MongoDB? 传统的计算机应用大多使用关系型数据库来存储数据,比如大家可能熟悉的MySql, Sqlite等等,它的特点是数据以表格(table)的形式 ...

随机推荐

  1. 给大模型添加联网功能的免费方案,以langchain为例

    langchain介绍 LangChain 是一个用于开发由大型语言模型 (LLM) 驱动的应用程序的框架. 简单来说,它可以帮助你更轻松地构建利用 LLM(例如 OpenAI 的 GPT 模型.Go ...

  2. Vulkan环境配置 | vscode+msvc 解决方案

    Vulkan环境配置 | vscode+msvc 解决方案 前言 如果作为Windows 11侠的你是一个vscode爱好者,凑巧电脑上还安装有Visual Studio,这个时候你突然想配置一个Vu ...

  3. windows mysql8安装zip

    MySQL 是一种广泛使用的关系数据库管理系统,MySQL 8 是其最新的主要版本,结合了出色的性能和丰富的功能. 一.准备工作 1. 下载MySQL 8 zip包 首先,你需要获取MySQL 8的压 ...

  4. RP 点归入Set And Coupling 约束创建

    想用python脚本创建一个耦合coupling关系,需要定义control piont和被控制的surfaces.两者都可以先分别归入到set 和surface里,最后用set和surface作为c ...

  5. Java List和Array之间的转换

    import java.util.Arrays; import java.util.List; class Test { //Object数组向List的转换 public static List&l ...

  6. 模型蒸馏(Distillation)案例--从DeepSeek-R1-1.5B 到 Qwen-2.5-1.5B 的模型蒸馏

    DeepSeek-R1-1.5B 到 Qwen-2.5-1.5B 的模型蒸馏(Distillation) 本文重点进行DeepSeek-R1-1.5B 到 Qwen-2.5-1.5B 的模型蒸馏(Di ...

  7. Python设置递归最大深度

    博客地址:https://www.cnblogs.com/zylyehuo/ import sys sys.setrecursionlimit(100000) # 设置最大递归深度,默认是3000

  8. vSphere虚拟化之ESXi的安装及部署

    vSphere虚拟化之ESXi的安装及部署一.什么是vSphere?vSphere是VNware公司在2001年基于云计算推出的一套企业级虚拟化解决方案.核心组件为ESXi.如今,经历了5个版本的改进 ...

  9. 《机器人SLAM导航核心技术与实战》先导课:如何安装Ubuntu系统

    <机器人SLAM导航核心技术与实战>先导课:如何安装Ubuntu系统 视频讲解 [先导课]2.如何安装Ubuntu系统-视频讲解 [先导课]2.1.如何安装Ubuntu系统-操作系统概念- ...

  10. study PostgreSQL【2-FireDAC连接PostgreSQL】

    就这么个简单问题,一下午时间.想想就憋屈. 那么牛逼哄哄FireDAC居然连接PostgreSQL出问题了.帮助中说的啥意思,咱也不明白.网上一通也是云里雾里. 上干货,具体点: TFDConnect ...