命令行参数介绍
在使用python开发脚本,作为一个运维工具,或者其他工具需要接受用户参数运行时,就可以用到命令行传参的方式
可以给使用者提供一个比较友好的交互体验
python中可以用sys模块中的sys.argv来获取命令行参数
然后可以在pycharm界面最下面的terminal或者cmd来操作运行
import sys
print('参数个数为:',len(sys.argv),'个参数')
print('参数列表',str(sys.argv))
这里用命令行直接输出(python test.py)的结果是:
参数个数为: 1 个参数
参数列表 ['test.py']
当然,你也可以在后面添加,如python test.py 1 3,结果是:
参数个数为: 3 个参数
参数列表 ['test.py', '1', '3']
argv返回命令行参数是一个列表,第一个元素是py文件的文件名,如果只想获取参数而不需要文件名,sys.argv也支持python字符串中的切片操作,可修改代码如下:
import sys
print('参数个数为:',len(sys.argv),'个参数')
print('参数列表',str(sys.argv[1:]))
sys.argv只提供了较简单的命令参数获取方式,没有提供命令提示,无法提供给使用者以help帮助,而argparse模块可以轻松编写对用户友好的命令行界面,某程序定义了它需要的参数,argparse将找出如何解析这些参数
argparse模块还会自动生成帮助和用法信息,并在用户给出无效参数时发出错误信息
import argparse
parse = argparse.ArgumentParser(prog='test.py',description='编写自命令行的文件')
# 简单给几个参数示范一下,具体每个参数的意义可以按住ctrl点击函数名查看
'''
以下中文解释从https://blog.csdn.net/huima2017/article/details/104797135的文章内摘取
prog:程序名,默认为sys.argv[0]
usage:描述程序用途的字符串,默认值从添加到解析器的参数生成
description:在参数帮助文档之前显示的文本
epilog:在参数帮助文档之后显示的文本
parents:一个 ArgumentParser 对象的列表,它们的参数也应包含在内
formatter_class:用于自定义帮助文档输出格式的类
prefix_chars:可选参数的前缀字符集合,默认为'-'
fromfile_prefix_chars:当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合
argument_default:参数的全局默认值
conflict_handler:解决冲突选项的策略(通常不必要)
add_help:为解析器添加一个 -h/--help 选项,默认为True
allow_abbrev:如果缩写是无歧义的,则允许缩写长选项,默认为True
'''
# argv里的添加参数选项:add_argument
'''
metaver:帮助信息中显示的参数名称
const:保存一个常量
default:默认值
type:类型,默认为str
choices:设定参数值的范围,如果choices里的类型不是str,请记得指定type
required:该选项是否必选,默认为True
dest:参数名
'''
# 这里参数有两种,可选参数和位置(必选)参数,运行时,默认会用'-'来辨认可选参数,其他剩下的即为位置参数,而位置参数为必传
parse.add_argument('name',type=str,help='名字')# 添加位置参数(必选)
parse.add_argument('age',type=int,help='年龄')# 添加位置参数(必选)
parse.add_argument('-s',dest='--sex',type=str,help='性别')# 添加可选参数
# print(parse.print_help())# 打印帮助文档
result = parse.parse_args()# 解析参数
print(result)# 这里也可用result.xx来限定输出什么
输入:
python test.py 小明 5 -s 男
输出结果:
usage: test.py [-h] [-s --SEX] name age
编写自命令行的文件
positional arguments:
name 名字
age 年龄
optional arguments:
-h, --help show this help message and exit
-s --SEX 性别
None
Namespace(age=5, name='小明', **{'--sex': '男'})
关于命令行参数的简单示例:简单登录
import argparse
parse = argparse.ArgumentParser(prog='登录')# 创建一个解析器对象
parse.add_argument('-u',dest='user',type=str,help='用户名')# 添加可选参数
parse.add_argument('-p',dest='password',type=str,help='密码')# 添加可选参数
result = parse.parse_args()# 开始解析参数
if(result.user == 'root' and result.password == '123456'):# 判断用户名及密码
print('登录成功')
pass
else:
print('用户名或密码错误')
pass
1.查看帮助文档:
python login.py -h
输出结果:
usage: 登录 [-h] [-u USER] [-p PASSWORD]
optional arguments:
-h, --help show this help message and exit
-u USER 用户名
-p PASSWORD 密码
2.输入正确的用户名及密码:
python login.py -u root -p 123456
输出结果:
登录成功