python 命令行参数
我们平常工作或学习中使用python大部分都是在写脚本,那如何能使我们的脚本程序可以像Windows的cmd窗口和Linux的shell窗口一样,进行任何操作都是通过命令行呢?
python中三个内建模块用于处理命令行参数:
sys
getopt
optparse
argparse
一、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("interrupted by user, killing all threads...")
二、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) print("args结果为:",args)
参数解释:使用 sys.argv[1:] 是为过滤第一个参数(第一个参数为Python程序本身) “u:p:” 为定义短格式选项(-)。这里的u和p为两个选项。“u:p:” 后面有 “:” 必须有选项值。
[“file=”] 为定义长格式选项(--)。这里的 “=” 和上面的短格式选项中的 “:” 一样,后面必须有选项值。
使用命令: python3 ./getoptdemo.py -u user -p password --file=123.txt 123456
三、optparse命令行参数
optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,与getopt函数不同的是optparse可以自动生成帮助信息。
import optparse usage = "python %prog -u/--user <target user> -p/--password <target password>" parser = optparse.OptionParser(usage) parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root') parser.add_option('-p', '--password',dest='Pwd',type='string',help='target password') options, args = parser.parse_args()
print("options为:",options) print("用户名为", options.User) print("密码为", options.Pwd)
print("args为:",args)
使用命令:python3 .\optparsedemo.py -h
python3 .\optparsedemo.py -u user -p password
四、argparse命令行参数
argparse是optparse模块的升级版,与optparse相比,argparse模块使用更加简单便捷。
import argparse parser = argparse.ArgumentParser() parser.add_argument('-u', '--user', dest='User', type=str,default='root', help = 'target User') parser.add_argument('-s', '--sex', dest='Sex', type=str,choices=['男','女'],default='男', help = 'target Sex') parser.add_argument('-n', '--number', dest='Num',nargs=2,required=True, type=int, help = 'target Two Numbers') print(parser.parse_args())
使用命令:python3 .\argparsedemo.py -h
python3 .\argparsedemo.py -n 12 15
argparse.ArgumentParser().add_argument 参数:
可以设置多个选项字符串,比如上面的 ‘-u’, ‘--user’ 这两个,用的时候任选其一;
type用于检测命令行输入参数的数据类型是否符合要求,有 string、int、float等类型;
dest=用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数;
help用于定义帮助信息;
default设置默认值;