[编程基础] Python命令行解析库argparse学习笔记
Python argparse教程展示了如何使用argparse模块解析Python中的命令行参数。
文章目录
1 使用说明
argparse模块使编写用户友好的命令行界面变得容易。它从中解析定义的参数sys.argv。该模块还自动生成帮助和用法消息,并在用户为程序提供无效参数时发出错误。使用ArgumentParser创建分析器,并使用add_argument()添加新参数变量。参数可以是optional(可选), required(必须), or positional(位置)。add_argument()中的常用参数设定值如下所示:
- name or flags,输入参数的名字或者列表,例如 foo 或者 -f, --foo;
- action,命令行遇到参数时的动作,默认值是 store;
- store_const,表示赋值为const;
- append,将输入的值存储成列表,也就是如果参数重复则会保存多个值;
- append_const,将参数规范中定义的一个值保存到一个列表;
- count,存储遇到的次数;
- nargs,应该读取的命令行参数个数;
- const,action 和 nargs 所需要的常量值;
- defaul,参数的默认值;
- type,命令行参数应该被转换成的类型;
- choices,可用的参数集合;
- required,该参数为必选输入参数;
- help,帮助说明;
- metavar,输入参数的替代名
- dest,被添加到 parse_args()所返回对象上的属性名;
1.1 Python argparse可选参数
下面的示例创建test1.py,内容为一个简单的参数解析器。add_argument添加参数-o和–out两个参数,参数效果一样,都是可选参数。前一个为参数简写只有一个字母,后一个为全参数。如果输入参数则输出This is some output。还有一个add_argument还有一个固定参数action=‘store_true’,表示命令行遇到参数时的操作,store将参数设为const,默认值是 store。参数用解析parse_args()。解析后的参数作为对象属性存在。
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
# action 命令行遇到参数时的动作
# -o为短参数,--output长参数
parser.add_argument('-o', '--output', action='store_true', help="shows output")
# parse_args()解析参数
args = parser.parse_args()
# 如果存在output
if args.output:
print("This is some output")
else:
print("This is not some output")
# 执行test1.py文件
# 输入--output参数
!python test1.py --output
print('-'*50)
# 输入-o参数
!python test1.py -o
print('-'*50)
# 什么都不输入
!python test1.py
print('-'*50)
# 输入--help参数
!python test1.py --help
!python test1.py -h
This is some output
--------------------------------------------------
This is some output
--------------------------------------------------
This is not some output
--------------------------------------------------
usage: test1.py [-h] [-o]
optional arguments:
-h, --help show this help message and exit
-o, --output shows output
usage: test1.py [-h] [-o]
optional arguments:
-h, --help show this help message and exit
-o, --output shows output
1.2 Python argparse必需参数
下面的示例创建test2.py,.add_argument()设定required = True,表示必须参数,该示例必须name指定选项。否则失败。
#!/usr/bin/env python
import argparse
# 创建解析器
parser = argparse.ArgumentParser()
# 设置--name为必须参数
parser.add_argument('--name', required=True)
# 解析参数
args = parser.parse_args()
print('Hello {}'.format(args.name))
# 执行test2.py文件
# 不输入参数
!python test2.py
print('-'*50)
# 输入参数
!python test2.py --name hello
usage: test2.py [-h] --name NAME
test2.py: error: the following arguments are required: --name
--------------------------------------------------
Hello hello
1.3 Python argparse位置参数
下面的示例创建test3.py,位置参数不需要前缀符号,直接输入参数值。
#!/usr/bin/env python
import argparse
# positional args
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('age')
args = parser.parse_args()
print('{} is {} years old'.format(args.name,args.age))
!python test3.py -h
print('-'*50)
!python test3.py --name
print('-'*50)
# 输入参数
!python test3.py "jack" 12
usage: test3.py [-h] name age
positional arguments:
name
age
optional arguments:
-h, --help show this help message and exit
--------------------------------------------------
usage: test3.py [-h] name age
test3.py: error: the following arguments are required: name, age
--------------------------------------------------
jack is 12 years old
1.4 Python argparse dest
dest选项为add_argument()参数指定名称。如果未给出,则从选项中推断出来。下面的示例创建test4.py,将-n的参数名称设定为now。
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-n', dest='now', action='store_true', help="shows now")
args = parser.parse_args()
# -n代表now
if args.now:
print(args.now)
# 运行文件
!python test4.py -n
True
1.5 Python argparse type
通过type参数确定参数类型。下面的示例创建test5.py。程序显示从-100到100的n个随机整数。
#!/usr/bin/env python
import argparse
import random
parser = argparse.ArgumentParser()
# type确定参数的类型值
parser.add_argument('-n', type=int, required=True,
help="define the number of random integers")
args = parser.parse_args()
n = args.n
# 输出随机数
for i in range(n):
print(random.randint(-100, 100))
# 运行程序
!python test5.py -n 5
34
-81
76
-62
-66
1.6 Python argparse default
default如果未指定该值,则该选项指定默认值。下面的示例创建test6.py。该示例计算指数,不需要指数值;如果未给出,则默认值为2。如果输入参数没有必选参数,可以直接运行代码输出值;如果想在代码内改变值,直接参数复制即可如arg.b=2。
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
# required设置强制性参数,设置输入参数
parser.add_argument('-b', type=int, required=True, help="defines the base value")
# default设置默认参数,设置指数值
parser.add_argument('-e', type=int, default=2, help="defines the exponent value")
args = parser.parse_args()
val = 1
base = args.b
exp = args.e
for i in range(exp):
val *= base
print(val)
# 使用 默认参数
!python test6.py -b 2
print('-'*50)
# 给定默认参数
!python test6.py -b 2 -e 3
4
--------------------------------------------------
8
1.7 Python argparse metavar
metavar选项为错误的期望值命名,并提供帮助输出。下面的示例创建test7.py。该示例设置期望值为value。默认名称是v。
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', type=int, required=True, metavar='value',
help="computes cube for the given value")
args = parser.parse_args()
print(args)
val = args.v
print(val * val * val)
!python test7.py -h
usage: test7.py [-h] -v value
optional arguments:
-h, --help show this help message and exit
-v value computes cube for the given value
1.8 Python argparse append action
append操作允许对重复选项进行分组。下面的示例创建test8.py。
#!/usr/bin/env python
import argparse
# append action allows to group repeating
# options
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--name', dest='names', action='append',
help="provides names to greet")
args = parser.parse_args()
names = args.names
# 分组输出
for name in names:
print('Hello {}!'.format(name))
!python test8.py -n Jack -n Rosy --name Jane
Hello Jack!
Hello Rosy!
Hello Jane!
1.9 Python argparse choices
choices选项将参数限制为给定列表。在示例test9.py中,now选项可以接受以下值:1,2,3。
#!/usr/bin/env python
import argparse
import datetime
import time
parser = argparse.ArgumentParser()
parser.add_argument('--now', dest='format', type=int, choices=[1, 2, 3],help="shows num in given format")
args = parser.parse_args()
fmt = args.format
print(fmt)
# 输入在可选范围内值
!python test9.py --now 1
print('-'*50)
# 输入不在可选范围内值
!python test9.py --now 4
print('-'*50)
# 不输入
!python test9.py
1
--------------------------------------------------
usage: test9.py [-h] [--now {1,2,3}]
test9.py: error: argument --now: invalid choice: 4 (choose from 1, 2, 3)
--------------------------------------------------
None
2 参考
[编程基础] Python命令行解析库argparse学习笔记的更多相关文章
- Python命令行解析库argparse
2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...
- Python命令行解析库argparse(转)
原文:http://www.cnblogs.com/linxiyue/p/3908623.html 2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse ...
- python命令行解析模块--argparse
python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...
- Python 命令行解析工具 Argparse介绍
最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具. 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题 ...
- python命令行解析工具argparse模块【1】
argpaser是python中很好用的一个命令行解析模块,使用它我们可以很方便的创建用户友好型命令行程序.而且argparse会自动生成帮助信息和错误信息. 一.示例 例如下面的例子,从命令行中获取 ...
- Python 命令行解析模块 —— argparse
argparse是python标准库里面用来处理命令行参数的库,基本使用步骤如下: 1.import argparse 导入模块 2.parser = argparse.ArgumentPars ...
- python命令行解析工具argparse模块【2】
上一节,我们简要的介绍了argparse的用法,接下来几节,将详细讲解其中的参数及用法,这一节我们讲解ArgumentParser对象. argparse.ArgumentParser([descri ...
- python命令行解析工具argparse模块【3】
上一节,我们讲解了ArgumentParser对象,这一节我们将学习这个对象的add_argument()方法. add_argument()方法的定义了如何解析一个命令行参数,每个参 ...
- python命令行解析工具argparse模块【5】
上一节我们学习了parse_args()的用法,这一节,我们将继续学习argparse的其他一些用法. 1.sub-commands子命令 argpar ...
随机推荐
- vivo互联网机器学习平台的建设与实践
vivo 互联网产品团队 - Wang xiao 随着广告和内容等推荐场景的扩展,算法模型也在不断演进迭代中.业务的不断增长,模型的训练.产出迫切需要进行平台化管理.vivo互联网机器学习平台主要业务 ...
- vue+spirngboot 分离技术实现图书信息的增删改查(改造这学期的课程设计【1】)
1.前端项目的创建 vue init webpack bookshopvue 安装axios http://www.axios-js.com/ npm install --save axios vue ...
- 齐博x1.2万能参数配置接口
为何叫做万能参数接口,那是因为可以随意设置后台哪些字段可以给接口使用,还可以无限的新增接口参数,这个参数不仅仅是一个开关或文字,还可以是一张图片.一组图片.一组菜单.一个视频地址等等,非常的灵活. h ...
- 齐博x1一段不错的小js提高一点点阅读体验 计算本文阅读所需的时长
如图所示很多比较大的站点都有这样的一个小玩意 就是本文有多少字 阅读需要多少时间. 一段小小的js就可以实现,当然了php也可以功能太小了不值得做钩子或者插件自己需要的话再模板加一下吧. <sc ...
- 每日算法3:随机生成五个不同整数,将数字转换为RMB格式
随机生成五个不同整数 点击查看代码 /* 题目解析: 1.采用Math对象的random()方法, 2.将每次生成的数跟之前的数判断相等则此次生成无效i-- */ function randomNum ...
- 二、Kubernetes 概念介绍
一.Master Master指的是集群控制节点,在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它负责具体的 ...
- letcode刷题记录-day02-回文数
回文数 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答 ...
- web安全学习(sql注入1)
web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...
- 万字详解JVM,让你一文吃透
摘要:本文将带大家详细地了解关于JVM的一些知识点. 本文分享自华为云社区<[JVM]关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列>,作者: 冰 河 . JDK 是什么? JDK ...
- 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记
这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~ 原文内容比较充实,建议有时间可以读一下原文. 第一章主要是个概览. MySQL的逻辑架构 默认情况下, ...