python 处理命令行参数
sys.argv
sys.argv是接受参数的列表,sys.argv[0]表示执行文件名,sys.argv[1:]表示接受的参数
python test.py arg1 arg2 arg3
使用len(sys.argv)来判断是否传入参数,如果len(sys.argv)等于1,表示没有传入参数;如果len(sys.argv) > 1,表示传入了参数,可以使用sys.argv[1:]获取传入的参数。
getopt模块
getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(–)。
该模块提供了两个方法及一个异常处理来解析命令行参数。
getopt.getopt()方法
getopt.getopt(args, options[, long_options])
方法参数说明:
- args: 要解析的命令行参数列表。
- options : 以字符串的格式定义,options 后的冒号 : 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
- long_options : 以列表的格式定义,long_options 后的等号 = 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。
- 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 或 – 的参数。
getopt.gnu_getopt()方法
异常getopt.GetoptError
在没有找到参数列表,或选项的需要的参数为空时会触发该异常。
异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。
实例
helpinfo = "python main.py"
try:
opts, args = getopt.getopt(sys.argv[1:], 'hi:o:', ['ifile=', 'ofile=', 'help'])
except getopt.GetoptError as e:
print(e)
print(opts, args)
if opts == [] and args == []:
print(helpinfo)
sys.exit()
for opt, arg in opts:
if opt in ('-h', '--help'):
print(helpinfo)
elif opt in ('-i', '--ifile'):
print(arg)
elif opt in ('-o', '--ofile'):
print(arg)
optparse模块
optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,自动生成帮助信息,不需要sys.argv
实例
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)
add_option参数:
- 可以设置多个选项字符串,比如上面的 ‘-u’, ‘–user’ 这两个,用的时候任选其一
- dest用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数
- type用于检测命令行输入参数的数据类型是否符合要求,有 string(字符串)、int(整数)、float(浮点数)等类型
- help用于定义帮助信息
- default设置默认值
增加帮助信息分组
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')
group = optparse.OptionGroup(parser, 'Debug Options') ## 创建group分组
parser.add_option_group(group) ## 把创建的组添加到parser中
group.add_option('-d', '--debug', action='store_true', help='Print debug information')
options, args=parser.parse_args()
action有三种类型:
- action=’store’ 默认类型,可以忽略不写。用户必须给出一个明确的参数值,该类型定义了将实际参数值保存到dest指定变量中
- action=’store_true’ 用户不需给出参数值,该类型定义了将布尔值true保存到dest指定的变量中(和上面getopt中不加 ‘:’ 、’=’)
- action=’store_false’ 用户不需给出参数值,该类型定义了将布尔值false保存到dest指定的变量中
获取软件版本
parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
输出version
python xxx.py --version
或者使用函数
parser.print_version() # 打印版本
print(parser.get_version()) # 返回版本
argparse模块
使用
- 新建解释器 argparse.ArgumentParser()
- 添加命令 add_argument()
- 添加子命令
添加参数
分为添加位置参数-positional arguments和可选参数-optional arguments
# 创建解析器
parse = argparse.ArgumentParser()
# 位置参数,没有前缀
parse.add_argument('foo')
# 可选参数,带有前缀,带’-‘为短参数,带’--‘为长参数
# 可以包含其中一个,也可以两个都包含
parse.add_argument('-r', help="运行")
parse.add_argument('-i', '--init', help='初始化')
parse.add_argument('--show', help='打印信息')
args = parse.parse_args(['boo', '-r', '1', '-i', '2', '--show', '3'])
parse.print_help() # 打印帮助信息,和传入-h参数效果一些
print(dir(args)) # 打印对象参数
print(args) # 打印对象
print(args.foo) # 打印变量值
短参数和长参数
位置变量
可选变量
实例
parse = argparse.ArgumentParser(description='帮助描述信息', prog='%prog', epilog='底部显示信息')
parse.add_argument('-u', '--user', dest='user', type=str, default='root', help='user name')
parse.add_argument('-p', '--password', dest='password', type=str, default='', help='user password')
parse.add_argument('-s', '--sex', dest='sex', type=str, choices=['男', '女'], default='男', help='target sex')
group =parse.add_argument_group(title='foo')
group.add_argument('-n', '--number', dest='Num', nargs=2, required=True, type=int, help='target Two Numbers')
parse.add_argument_group(group)
print(parse.parse_args())
输出结果
usage: %prog [-h] [-u USER] [-p PASSWORD] [-s {男,女}] -n NUM NUM
帮助描述信息
optional arguments:
-h, --help show this help message and exit
-u USER, --user USER user name
-p PASSWORD, --password PASSWORD
user password
-s {男,女}, --sex {男,女}
target sex
foo:
-n NUM NUM, --number NUM NUM
target Two Numbers
底部显示信息
参考
- http://www.360doc.com/content/18/0929/15/50979635_790696415.shtml
- https://docs.python.org/zh-cn/3/library/argparse.html
- https://blog.csdn.net/caidaoqq/article/details/44706005
- https://www.cnblogs.com/songguoyou/p/11919730.html
- https://www.cnblogs.com/yuandonghua/p/10619941.html
- https://www.runoob.com/python/python-command-line-arguments.html
- https://www.cnblogs.com/cuhm/p/10643765.html#/c/subject/p/10643765.html