Python开发-038_命令行参数
一般服务器都是linux操作系统并且是无图形界面的,所以进行任何操作都是通过命令行。一些命令行工具的使用能够大大简化代码脚本的维护成本,提升复用性,python提供的几种主流的参数解析工具来实现简单的功能Python中三个内建模块用于处理命令行参数:
sys
getopt
optparse
argparse
1 sys命令行参数
sys模块主要用于获取和Python解释器相关的信息,可在Python交互式解释器中先导入sys模块 import sys。通过内置函数dir()查询到模块内定义的所有名称,并以一个字符串列表的形式返回:
sys.argv
: 以列表的方式获取运行 Python 程序的命令行参数
其中 ,sys.argv[0]
通常指该 Python程序本身,sys.argv[1]
代表第一个参数,sys.argv[2]
代表第二个参数,以此类推
import sys
def start(argv):
print("执行程序名:",argv[0])
print("第一个参数:",argv[1])
print("第二个参数:",argv[2])
print("第三个参数:",argv[3])
if __name__ == '__main__':
try:
start(sys.argv[0:])
except KeyboardInterrupt:
print("被用户中断,正在终止所有线程...")
输出结果:
python .\命令行参数\001_sys.py aa bb cc
执行程序名: .\命令行参数\001_sys.py
第一个参数: aa
第二个参数: bb
第三个参数: cc
2 getopt命令行参数
getopt
是对sys.argv
获取的命令行参数进行二次处理。在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能,比如-u代表后面是用户,-p代表后面是密码。
调用getopt.getopt()
会返回两个列表,第一个列表赋值给opts
,第二个列表赋值给args
opts:是 (选项, 选项值) 的元组为一个元素的列表。如果没有选项值为空字符串;
args:存放没用选项单参数的列表。不属于格式信息的剩余的命令行参数;
import sys,getopt
opts,args = getopt.getopt(sys.argv[1:],"u:p:",['file='])
print("opts输出结果为",opts) # 带 -u -p --file 参数的放在此 (如果-没有的参数 会报错)
print("args输出结果为",args) # 不带参数的放在此
输出结果:
python .\命令行参数\002_getopt.py -u kinght -p admin --file=123.txt kkk zdb
opts输出结果为 [('-u', 'kinght'), ('-p', 'admin'), ('--file', '123.txt')]
args输出结果为 ['kkk', 'zdb']
使用 sys.argv[1:]
是为过滤第一个参数(第一个参数为Python程序本身)
-
"u:h"
为定义短格式选项(-)
- 这里的h和u为两个选项
"h"
后面没有“:”
表示h这个选项没有选项值"u:"
后面有“:”
必须有选项值
- 这里的h和u为两个选项
-
[“help”, “file=”]
为定义长格式选项(--)。这里的 “=” 和上面的短格式选项中的 “:” 一样,后面必须有选项值。
案例:
import sys,getopt
def help():
print('帮助信息')
sys.exit() # 退出程序
def user(user):
print('user:',user)
def passwd(password):
print('passwd:',password)
def run(argv):
try:
opts,args = getopt.getopt(argv,"-u:-p:h",['file=','help'])
except getopt.GetoptError: # 没有这个参数
print('存在错误的参数')
sys.exit() # 退出程序
for opt,arg in opts:
if opt == '-h' or opt == '--help':
help()
if opt == '-u':
user(arg)
if opt == '-p':
passwd(arg)
if opt == '--file':
print(arg)
if __name__ == '__main__':
try:
run(sys.argv[1:])
except Exception:
print("程序运行中断....")
3 optparse命令行参数
optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,与getopt函数不同的是optparse可以自动生成帮助信息
import optparse
useage = '这是一个optparse的测试脚本'
parser = optparse.OptionParser(useage)
# -u 短链接 --user 长链接 dest存放输入值 type输入类型校验 help提示信息 default默认值
parser.add_option('-u','--user',dest="User",type='string',help='user name',default='root')
parser.add_option('-p','--passwd',dest="passwd",type='string',help='user passwd')
options,args = parser.parse_args()
print(options.User) # 输出输入的值
print(options.passwd)
命令行参数:
optparse.OptionParser(usage).add_option()参数:
可以设置多个选项字符串,比如上面的 ‘-u’, ‘--user’ 这两个,用的时候任选其一;
dest=用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数;
type用于检测命令行输入参数的数据类型是否符合要求,有 string、int、float等类型;
help用于定义帮助信息;
default设置默认值;
输出结果:
python .\命令行参数\004_optparse.py --help
Usage: 这是一个argparse的测试脚本
Options:
-h, --help show this help message and exit
-u USER, --user=USER user name
-p PASSWD, --passwd=PASSWD
user passwd
4 argparse命令行参数
argparse是optparse模块的升级版,与optparse相比,argparse模块使用更加简单便捷,其使用效果如下图所示。相信未来argparse会逐渐替代optparse
argparse.ArgumentParser().add_argument 参数:
可以设置多个选项字符串,比如上面的 ‘-u’, ‘--user’ 这两个,用的时候任选其一;
type用于检测命令行输入参数的数据类型是否符合要求,有 string、int、float等类型;
dest=用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数;
help用于定义帮助信息;
default设置默认值;
案例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-u','--user',dest="user",type=str,help='user name',default='root')
parser.add_argument('-p','--passwd',dest="passwd",type=str,help='user passwd')
parser.add_argument('-s','--sex',dest='sex',type=str,choices=['男','女'],default='男',help='target sex')
# choices 选项 选填 男女
parser.add_argument('-n','--namber',dest="Num",nargs=2,required=True,type=int,help='target Two number')
# nargs = 2 必须要两个参数 required=True为不可省略,默认为可省略
print(parser.parse_args())
print(parser.parse_args().user) # 可以单独输出某一参数