Python中三种命令行参数利用方式详解
作者:ju_ju_bone
一、sys.argv介绍
1.使用方法
我们可以通过导入 sys 模块来使用 sys.argv,这个模块提供了一个名为 argv 的列表,保存了命令行中传递的所有参数。在代码中可以通过 sys.argv[i] 来获取第 i 个参数的值,其中 i 从 0 开始计数,也就是说 sys.argv[0] 存储的是 Python 脚本本身的名称。
2.案例1
print("程序名:",sys.argv[0]) print("第一个参数:",sys.argv[1]) print("第二个参数:",sys.argv[2]) print("第三个参数:",sys.argv[3])
执行结果:
3.案例2——读取文件内容
假设我们有一个程序需要读取一个文件名,并且对文件进行操作,这时候我们可以使用 sys.argv 来避免在代码中写死文件名。
if len(sys.argv) < 2: print("usafe: python sysArgv.py filename") sys.exit() filename = sys.argv[1] try: with open(filename,'r') as f: print(f.read()) except: print("文件不存在") sys.exit()
执行结果:
二、getopt
1.案例1
使用 sys.arg[1:]是为过滤第一个参数(第一个参数为Pylhon程序本身)
1、“-u:-p:” 为定义短格式选项(-)。这里的p和u为两个选项,u后面有“:”必须有选项值。
2、[“file="] 为定义长格式选项(–)。这里的“=”和上面的短格式选项中的“:”一样,后面必须有选项值。
getopt是对sys.argv获取的命令行参数进行二次处理。在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能,比如-u代表后面是用户,-p代表后面是密码。调用getopt.getopt()会返回两个列表,第一个列表赋值给opts,第二个列表赋值给args:
1、opts:是(选项,选项值)的元组为一个元素的列表。如果没有选项值为空字符串
2、args: 存放没用选项单参数的列表。不属于格式信息的剩余的命令行参数:
import sys import getopt opts,argv = getopt.getopt(sys.argv[1:],'-u:-p:',["file="]) print("opts输出结果为:",opts) print("args输出结果为:",argv)
2.案例2——读取文件内容
简单实例:
import sys import getopt def usage(): print('-h: --help 帮助;') print('--file=文件名') def read(filename): try: with open(filename, 'r') as f: print(f.read()) except: print("文件不存在") sys.exit() def start(argv): file = "" if len(argv)<1: print("-h 获取帮助信息") sys.exit() opts, argvs = getopt.getopt(argv, '-h', ["file="]) for opt,arg in opts: if opt == "-h": usage() elif opt == "--file": read(arg) if __name__ == '__main__': start(sys.argv[1:])
运行结果:
三、optparse
案例1
optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,与getopt函数不同的是optparse可以自动生成帮助信息。
type=: 表示输入命令行参数的值的类型,默认为string,可以指定为string, int, choice, float,complex其中一种;
import optparse def start(): 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.User) print("密码为", options.Pwd) if __name__ == '__main__': try: start() except KeyboardInterrupt: print("interrupted by user, killing all threads...")
案例2——读取文件内容
import optparse import sys def read(filename): try: with open(filename, 'r') as f: print(f.read()) except: print("文件不存在") sys.exit() def start(): usage = "python %prog -u/--user <target user> -p/--password <target password> -f/--file <target file>" 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') parser.add_option('-f','--file', dest='Filename',type='string',help='write report to FILE', metavar='FILE',default='123.txt') print(parser.parse_args()) options, args = parser.parse_args() print("用户名为", options.User) print("密码为", options.Pwd) print("文件为",options.Filename) # for option,arg in parser.parse_args(): # if option.Filename == '-f': read(options.Filename) if __name__ == '__main__': try: start() except KeyboardInterrupt: print("interrupted by user, killing all threads...")
- default=: 表示命令参数的默认值;
- Metavar=: 显示到帮助文档中用来提示用户输入期望的命令参数;
- dest=:指定参数在options对象中成员的名称,如果没有指定dest参数,将用命令行参数名来对options对象的值进行存取。
- help=: 显示在帮助文档中的信息;
四、argparse
argparse是optparse的升级版本,与optparse相比,argparse使用更加简单
案例1
import argparse ''' argparse.ArgumentParser().add_argument参数: 1、可以设置多个选项字符串,比如上面的'-u','--user'这两个,用的时候任选其一; 2、type用于检测命令行输入参数的数据类型是否符合要去,有string、int、float等类型; 3、dest=用于定义选项存放的位置,作为后面的第一个字典(options)的键,值为命令行输入的参数; 4、help用于定义帮助信息; 5、default设置默认值 ''' parse = argparse.ArgumentParser() parse.add_argument('-u', '--user', dest='User', type=str, help='target user', default='root') parse.add_argument('-s','--sex',dest='Sex',type=str,choices=['男','女'],default='男',help='target sex') parse.add_argument('-n','--number',dest='Num',required=True,type=int,default='target two number') print(parse.parse_args().User,parse.parse_args().Sex,parse.parse_args().Num)
案例2——读取文件内容
import sys,argparse def read(filename): try: with open(filename, 'r') as f: print(f.read()) except: print("文件不存在") sys.exit() def start(): parse = argparse.ArgumentParser() parse.add_argument('-u', '--user', dest='User', type=str, help='target user', default='root') parse.add_argument('-s','--sex',dest='Sex',type=str,choices=['男','女'],default='男',help='target sex') parse.add_argument('-n','--number',dest='Num',required=True,nargs=1,type=int,default='target two number') parse.add_argument('-f','--file',dest='File',type=str,default='123.txt') print(parse.parse_args().User,parse.parse_args().Sex,parse.parse_args().Num,parse.parse_args().File) read(parse.parse_args().File) if __name__ == '__main__': start()
总结
argparse比较常用
到此这篇关于Python中三种命令行参数利用方式详解的文章就介绍到这了,更多相关Python命令行参数利用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!