第一部分:
sys.argv[ ]
也有个类似的功能:
========================================================================================
sys.argv [ ]
可以将sys.argv[]看作为一个列表,来解析终端命令输入的外部参数,
sys.argv[0] -----------> 指向当前python文件的文件名
sys.argv[1] ------------> 指向文件名之后的第一个参数
sys.argv[2] ------------> 指向文件名之后的第二个参数
..... 以此类推
=======================================================================================
例如:有一个python文件 mytest.py 内容如下:
import sys
print "filename =", sys.argv[0]
for i in range(1, len(sys.argv)):
print "para%s=%s"%(i,sys.argv[i])
在终端运行后,会输出 文件名
$ python mytest.py name age sex
filename =mytest.py
para1=name
para2=age
para3=sex
第二部分:
ArgumentParser
import argparse 首先导入该模块
parser = argparse.ArgumentParser() 然后创建一个解析对象
parser.add_argument('echo') 然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项
args = parser.parse_args() 最后调用parse_args()方法进行解析,解析成功之后即可使用
print args.echo
AugumentParser类的参数
class ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)
一般创建接收器的时候省略AugumentParser的参数,这里简单介绍一些参数:
prefix_chars 是参数的前缀,默认为‘_’
fromfile_prefix_chars 前缀字符,
description: 描述程序
添加参数选项 - add_argument
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
name or flags
:参数有两种,可选参数和位置参数。parse_args()运行时,默认会用’-‘来认证可选参数,剩下的即为位置参数。
定位参数:
parser.add_argument("echo",help="echo the string")
可选参数:
parser.add_argument("--verbosity", help="increase output verbosity")
在执行程序的时候,定位参数必选(必须被赋值),可选参数可选(可以不用赋值)。
dest:如果提供dest,例如dest="a",那么可以通过args.a访问该参数
default:设置参数的默认值
action:参数出发的动作
store:保存参数,默认
store_const:保存一个被定义为参数规格一部分的值(常量),而不是一个来自参数解析而来的值。
store_ture/store_false:保存相应的布尔值
append:将值保存在一个列表中。
append_const:将一个定义在参数规格中的值(常量)保存在一个列表中。
count:参数出现的次数
parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
version:打印程序版本信息
type:把从命令行输入的结果转成设置的类型
parser.add_argument("-v", "--verbosity", action="count", type=int, help="increase output verbosity")
choice:允许的参数值
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity")
help:参数命令的介绍
例子1:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo')
args = parser.parse_args()
print args.echo
在终端必须 给echo这个定位参数赋值,不赋值则报错(即使不使用该参数也报错)。
$ python mytest.py 123
123
$ python mytest.py
报错
而可选参数的话
$ python mytest.py
1
$ python mytest.py -echo name
1
$ python mytest.py name
报错 必须加上-echo
$ python mytest.py -echo name -sing age -dance sex
age
多个可选参数的话
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, help='your name')
parser.add_argument('-age', type=int, help='your age', dest='age')
parser.add_argument('-sex', type=str, help='your sex', dest='sex', choice=['man','woman'])
parser.add_argument('-c','-country', type=str, help='your country', dest='country')
args = parser.parse_args()
print 'my name is ', args.name
info = args.__dict__
for key,value in info.iteritems():
print '%s==%s'%(key,value)