运动鞋网站的建设风格,wordpress主题DUX大前端,高端 网站,众筹网站制作前言 命令行程序#xff0c;也称CLI程序#xff0c;另一个直观的名字是脚本程序#xff0c;简称脚本#xff0c;由于没有图形用户界面#xff08;GUI#xff09;#xff0c;所以脚本程序常见的交互方式有3种#xff1a;
1、脚本程序中读取环境变量#xff0c;比如env…前言 命令行程序也称CLI程序另一个直观的名字是脚本程序简称脚本由于没有图形用户界面GUI所以脚本程序常见的交互方式有3种
1、脚本程序中读取环境变量比如env等命令
2、脚本程序中读取传入的命令行参数比如ls、adb程序
3、脚本程序中读取文件内容比如nginx程序 今天我们一起学习第二种脚本程序中传入命令行参数这种方式如果想优雅的编写python脚本程序怎么能离开argparse模块呢 命令行参数的分类 脚本程序离不开命令行参数命令行参数根据标准特性分为以下7种
1、位置参数必选参数
python hello_world.py hello man
空白字符隔开python后面的3个参数均为命令行参数单词中没有- 2、可选参数单个短参数无参数值
ls -l
空白字符隔开减号字母的组合短参数使用的还挺多上方介绍ls -l-l就是短参数 3、可选参数单个短参数有参数值
python hello_world.py -n wangyuanwai
-n wangyuanwai也是通过空白字符隔开-n后面的参数作为参数值传递到脚本程序中
4、可选参数长参数无参数值
python hello_world.py --verbose
长参数一般使用--xxxx使用两个减号这样的参数我们平时都是在脚本程序中使用的也是为了方便阅读
5、可选参数长参数有参数值
python hello_world.py --name wangyuanwai
这也是最常用的一种方式了--name 后面跟着是参数值
6、组合 python hello_world.py -v --name wangyuanwai 就是将上面几种参数组合起来使用 7、非标准那种传参历史原因不建议用尤其是tar命令…… ps -ef tar -cvf home_backup.tar /home argparse作者信息 argparse模块用于解析命令行参数的模块位于python标准库中写python脚本程序建议一定要学习argparse模块这样你的程序就和作者一样优雅了 截止到2021年11月6日argparse模块一共2575行代码 源码位置lib/argparse.py文件中 作者Steven J. Bethard 当前维护者Raymond Hettinger argparse怎么使用的详细讲解 我来解释一下下面3行代码是干什么的
import argparsemy_parse argparse.ArgumentParser()my_parse.add_argument(fake, actionstore, helpwhat is fake?)name_space my_parse.parse_args()
1、导入argparse模块 import argparse 2、创建ArgumentParser对象同时赋值给一个全局变量 my_parse argparse.ArgumentParser() 3、调用ArgumentParser的add_argument方法添加一个命令行参数 my_parse.add_argument(fake, actionstore, helpwhat is fake?) 5、调用ArgumentParser的parse_args方法后命令行参数会被保存下来同时返回一个namespace对象 name_space my_parse.parse_args() 平时使用的时候就这几个步骤
1、创建ArgumentParser对象
2、添加命令行参数
3、获取namespace对象提取传入的命令行参数 让我们第一次实操 先写一个my_demo.py只有3行代码 import argparsemy_parse argparse.ArgumentParser()my_parse.parse_args() 命令行输入
python my_demo.py
输出结果
# 空的什么都没有 由于我们什么也没做命令行参数部分什么也没做 能力1argparse模块可以返回帮助信息当然支持自定义
命令行输入
python my_demo.py -h#或者python my_demo.py --help
输出结果
usage: my_demo.py [-h]optional arguments:-h, --help show this help message and exit 这段在标准输出中的文本信息是argparse模块返回的当传入短选项参数-h或者完整参数--helpargparse就会在标准输出中打印帮助信息下面我来详细解释一下他们
usagemy_demo.py [-h] usage开头的这行表示使用的是my_demo.py脚本后面的-h指这个脚本可接受一个可选参数为-h
optional arguments:optional argments这行开始表示有哪些可选参数 -h, --help show this help message and exit 表示一个可选参数的作用告知可传入短参数-h或者完整的选项参数--help接着为-h参数的解释此处表示-h的参数是用于展示帮助信息然后程序会结束后面我会告诉大家怎么添加帮助信息 能力2argparse模块会自动检测无效的命令行参数
命令行输入
python my_demo.py -w
输出结果
usage: my_demo.py [-h]
my_demo.py: error: unrecognized arguments: -w 选项参数-w并不是my_demo.py脚本程序支持的命令行参数argparse模块会获取到该选项参数然后提示错误-w是不符合要求的参数。 我们的脚本程序my_demo.py中不支持选项参数-wargparse模块会自动完成对命令行参的容错这意味着使用argparse模块我们不必再为错误的命令行参数进行容错 能力3argparse模块自动检测未传入的位置参数
import argparsemy_parse argparse.ArgumentParser()my_parse.add_argument(age) #加了一个位置参数my_parse.parse_args() 添加位置参数使用ArgumentParser对象的add_argument方法为它传入一个字符串参数表示位置参数位置参数也称必选参数我们尝试执行脚本
命令行输入
python my_demo.py
输出结果
usage: my_demo.py [-h] age
my_demo.py: error: the following arguments are required: age 报错了原因是缺少位置参数控制台猜测是标准错误展示argparse模块生成的错误信息提示错误以下参数必须设置age位置参数的名称
命令行输入
python my_demo.py 18
输出结果
#空的什么都没有 这次不再报错因为我们传入了位置参数18命令行中通过空格字符分隔脚本名称与参数此时我们的脚本程序什么都没做所以控制台什么都看不到为什么位置参数必须传入呢接下来解释一下什么是位置参数 什么是位置参数 什么是位置参数它的名字正是由于其位置而得名
命令行输入
python my_demo.py 18
此时的参数18位于脚本文件my_demo.py的后面它是位置参数由于在第1个位置所以也称作第1个位置参数空白字符用来分隔参数 如何使用位置参数
import argparsemy_parse argparse.ArgumentParser()my_parse.add_argument(age) # 添加一个位置参数name_space my_parse.parse_args()print(你的年龄: name_space.age) # 使用命令行参数值命令行输入
python my_demo.py 18
输出结果
你的年龄:18 parse_args方法会返回1个Namespace对象我们需要将该对象保存到变量中然后访问Namespace对象的属性即可获取传入的命令行参数值重点在这行代码
name_space.age 注意Namespace中的属性名是你添加位置参数时指定的属性名见红色箭头 再次添加一个位置参数
import argparsemy_parse argparse.ArgumentParser()my_parse.add_argument(age) # 加了一个位置参数my_parse.add_argument(sex) # 又加了一个位置参数name_space my_parse.parse_args()print(你的年龄: name_space.age) # 使用命令行参数值
print(我的性别 name_space.sex) 命令行输入
python my_demo.py 18 男
输出结果
你的年龄:18
我的性别男
第一次使用了2个位置参数这时候的脚本程序必须传入2个参数才能执行成功2个参数同样也使用空白字符隔开空格字符、制表符、任何个空格字符均可 为位置参数添加帮助信息
#省略代码…………my_parse.add_argument(age,help请传入你的年龄) # 添加帮助信息my_parse.add_argument(sex,help请传入您的性别) # 添加帮助信息#省略代码…………
命令行输入
python my_demo.py -h或者python my_demo.py --help
输出结果
usage: my_demo.py [-h] age sexpositional arguments:age 请输入您的年龄sex 请输入您的性别optional arguments:-h, --help show this help message and exit 如果只是添加了位置参数而命令行的使用者并不知道该参数的作用所以添加位置参数时可以使用add_argument()的help关键字参数添加帮助信息 如果需要获悉脚本程序如何使用仅需执行python xxx.py --help即可知道脚本程序规定的参数用途是什么 能力4添加简短的可选参数由于是可选参数未传入也不报错
#省略代码……my_parse.add_argument(-c) # 添加一个可选参数#省略代码……print(我的国籍 name_space.c if name_space.c else 空) # 使用可选参数命令行输入
python my_demo.py 18 男
输出结果
你的年龄:18
我的性别男
空 添加可选参数-c短参数意味着可以不传入可选参数脚本程序照样执行 访问短参数表示的命令行参数直接通过不包含-的参数名即可如果是-c我们仅需使用name_space.c即可访问 能力4添加完整的可选参数
#省略代码……my_parse.add_argument(--country) # 添加一个完整的可选参数#省略代码……print(我的国籍 name_space.country if name_space.country else 空) # 使用可选参数
命令行输入
python my_demo.py 18 男 --country 中国
输出结果
你的年龄:18
我的性别男
我的国籍中国 完整的选项参数也称作长参数使用--开头它比短参数的语义更明确更适用在其它脚本程序中使用 访问长参数的选项参数值仅需使用name_space.country即可不包括-- 能力4添加一个即可用短参数、又可用长参数的可选参数
#省略代码……my_parse.add_argument(-c, --country) # 添加一个即有短参数又有长参数的可选参数#省略代码……print(我的国籍 name_space.country if name_space.country else 空) # 使用可选参数命令行输入
python my_demo.py 18 男 --country 中国
或者
python my_demo.py 18 男 -c 中国
输出结果
你的年龄:18
我的性别男
我的国籍中国 由于该可选参数--country也指定了-c作为短参数所以你即可以使用-c也可以使用--country传入命令行参数非常方便
注意此时不能使用name_space.c读取命令行参数当同时存在时必须使用长参数获取Namespace对象的属性这个坑不坑…… 告诉用户你的命令行程序的用途
#省略代码……my_parse argparse.ArgumentParser(description我这个程序主要是讲解argparse模块的使用)#省略代码……在ArgmentParse对象初始化时可以传入关键字参数description指定的字符串将作为程序的说明
命令行输入
python my_demo.py -h
输出结果
usage: my_demo.py [-h] [-c COUNTRY] age sex我这个程序主要是讲解argparse模块的使用positional arguments:age 请输入您的年龄sex 请输入您的性别optional arguments:-h, --help show this help message and exit-c COUNTRY, --country COUNTRY
我们可以清晰的看到程序说明这对命令行程序很重要用户使用python my_demo.py -h 或者 python my_demo.py --help去查看你的脚本程序怎么使用 总结
1、argparse模块是python的标准库
2、argparse模块格局标准对位置参数、可选参数进行了默认的处理
3、默认支持返回帮助信息
4、以后写python命令行模块用argpase模块就对了。。。
5、更多的使用方法请参考官方文档argparse 教程 — Python 3.12.6 文档