有时候我们在执行程序时,程序要读去命令行中的参数
1、sys模块
通过sys模块中sys.argv,访问命令行中的参数
如:
#coding:utf-8
import sys
def read_command_param():
print ("脚本名称:" + sys.argv[0])
print ("参数个数" , len(sys.argv))
print ("参数列表:"+ str(sys.argv))
print ("ip:"+ sys.argv[1])
read_command_param()
执行命令:python command_param.py 192.168.1.1
2、getopt模块
如果想要在命令行参数前加命令行选项,
如python command_param.py -u root -p password
-u -p为命令行选项,而不是参数
这时我们需要getopt模块,使用getopt.getopt方法
def command_param(argv):
try:
options, args = getopt.getopt(argv, "hp:i:u:", ["help", "ip=", "port=", "user="])
except getopt.GetoptError:
sys.exit()
for option, value in options:
if option in ("-h", "--help"):
print("help")
if option in ("-i", "--ip"):
print("ip is: {0}".format(value))
if option in ("-p", "--port"):
print("port is: {0}".format(value))
if option in ("-u", "--user"):
print("user is: {0}".format(value))
print("error args: {0}".format(args))
command_param(sys.argv[1:])
执行命令:python command_param.py -i 192.168.1.1 -i 192.168.1.2 --user wxt
注:
sys.argv是获取参数列表,其中sys.argv[1:]获取除第一个参数,因为第一个参数为执行文件“command_param.py”,即argv得到所有参数
“hp:i:u:”, [“help”, “ip=”, “port=”, “user=”] 这部分匹配命令行选项,如-u --user
for循环,提取命令行选项后面的参数
3、argparse模块
用于解析命令行选项和参数的标准模块
# encoding=utf-8
import argparse
def main():
parser = argparse.ArgumentParser(usage="it's usage tip.", description="help info.")#创建解析对象
parser.add_argument("-i","--ip",default='192.168.1.1', nargs='*',help="ip address", dest="ip_address")#向该对象中添加使用到的命令行选项和参数
parser.add_argument("-p","--port",default=80, nargs='*',help="ip address", dest="port")#向该对象中添加使用到的命令行选项和参数
args = parser.parse_args()#解析命令行
print (args.ip_address)
print (args.port)
main()
执行命令:python command_param.py -i 192.168.1.1 192.168.1.2 -p 80
解析:
1)创建argparse对象
2)向该对象中添加命令行选项和参数
3)解析命令行
4)提取命令行参数
其中add_argument(name or flags... [, action] [, nargs] [, const] [, default] [, type] [, choices] [, required] [, help] [, metavar] [, dest])
name or flags: 命令行参数名或者选项,如-p, --port
action:
store: 默认的action模式,存储值到指定变量
store_const: 存储值在参数的const部分指定,常用来实现非布尔的命令行flag
store_true/store_false: 布尔开关。store_true的默认值为False,若命令行有输入该布尔开关则值为True。store_false相反
append: 存储值到列表,该参数可以重复使用
append_const: 存储值到列表,存储值在参数的const部分指定
count: 统计参数简写的输入个数
version: 输出版本信息,然后退出脚本
nargs: 命令行参数的个数,一般用通配符表示: ?表示只用一个,*表示0到多个,+表示1到多个
default: 默认值
type: 参数的类型,默认是string类型,还可以是float、int和布尔等类型
choices: 输入值的范围
required: 默认为False,若为True则表示该参数必须输入
help: 使用的帮助提示信息
dest: 参数在程序中的对应的变量名称,如:add_argument("-a", dest="code_name"),在脚本中用parser.code_name来访问该命令行选项的值