原文地址:http://www.cnblogs.com/arkenstone/p/6250782.html
http://blog.csdn.net/WIinter_FDd/article/details/75786410
如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。比如如下名为test.py的脚本:
import sys
print("Input argument is %s" %(sys.argv[0]))
在shell脚本中运行python test.py 可以得到Input argument is test.py 的结果。
但是大多数情况下,脚本很可能需要多个参数,而且每次参数的类型用处各不相同,那么这个时候在参数前添加标签表明参数的类型和用途便十分有用,而利用argparse模块可以很方便得实现这一目的。
同样用名为test.py的脚本举个栗子:
import argparse
parser = argparse.ArgumentParser(description="your script description") # description参数可以用于插入描述脚本用途的信息,可以为空
parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode') # 添加--verbose标签,标签别名可以为-v,这里action的意思是当读取的参数中出现--verbose/-v的时候
# 参数字典的verbose建对应的值为True,而help参数用于描述--verbose参数的用途或意义。
args = parser.parse_args() # 将变量以标签-值的字典形式存入args字典
if args.verbose:
print ("Verbose mode on!")
else:
print ("Verbose mode off!")
PS:--help标签在使用argparse模块时会自动创建,因此一般情况不需要我们主动定义帮助信息。
$ python test.py --help
usage: test.py [-h] [--verbose]
your script description
optional arguments:
-h, --help show this help message and exit
--verbose, -v verbose mode
这种模式用于确保某些必需的参数有输入。
parser.add_argument('--verbose', required=True, type=int)
位置参数与sys.argv调用比较像,参数没有显式的--xxx或者-xxx标签,因此调用属性也与sys.argv相同。
parser.add_argument('filename') # 输入的第一个参数赋予名为filename的键
args = parser.parse_args()
print ("Read in %s" %(args.filename))
输入
python test.py test.txt则会输出Read in test.txt
此外,可以用nargs参数来限定输入的位置参数的个数,默认为1。当然nargs参数也可用于普通带标签的参数。
parser.add_argument('num', nargs=2, type=int)表示脚本可以读入两个整数赋予num键(此时的值为2个整数的数组)。nargs还可以'*'用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;‘+’表示读取至少1个该位置参数。'?'表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)比如用:
parser.add_argument('filename')
parser.add_argument('num', nargs='*)
就可以运行
python test.py text.txt 1 2
之前已经提到了用type参数就可以指定输入的参数类型。而这个type类型还可以表示文件操作的类型从而直接进行文件的读写操作。
import argparse
parser = argparse.ArgumentParser(description="your script description")
parser.add_argument('file', type=argparse.FileType('r')) # 读取文件
args = parser.parse_args()
for line in args.file:
print (line.strip())
import argparse
parser = argparse.ArgumentParser(description="your script description")
parser.add_argument('file', type=argparse.FileType('w')) # 写文件
args = parser.parse_args()
fp=args.file
fp.write('123345')
fp.flush()
fp.close()
一般情况下会设置一些默认参数从而不需要每次输入某些不需要变动的参数,利用default参数即可实现。
parser.add_argument('filename', default='text.txt')
这个时候至直接运行python text.py就能得到Read in text.txt而不需要输入文件名了。
表示该参数能接受的值只能来自某几个值候选值中,除此以外会报错,用choices参数即可。比如:
parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])
参考:https://mkaz.tech/python-argparse-cookbook.html
https://docs.python.org/2/howto/argparse.html
1:import argparse
2:parser = argparse.ArgumentParser()
3:parser.add_argument()
4:parser.parse_args()
我们对这四个步骤解释一下:首先导入该模块;然后创建一个解析对象;然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;最后调用parse_args()方法进行解析;解析成功之后即可使用。接下来我们来说明一下argparse模块中最重要的两个部分:ArgumentParser()和add_argument()。
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)
这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时,会打印这些描述信息,一般只需要传递description参数,如上所示。
下面将对ArgumentParser参数的简单说明进行中文版本的简单说明:
add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices]
[, required][, help][, metavar][, dest])
最常用的参数也就是以上这些,如果有更多的需求,那么可以查看官方的API文档。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
$ python prog.py 1 2 3 4
4
$ python prog.py 1 2 3 4 --sum
10
我们下面来看一段代码:
# -*- coding: utf-8 -*-
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
parser.add_argument("--square", help="display a square of a given number",
type=int)
args = parser.parse_args()
print(args.accumulate(args.integers), args.square**2)
结果: 6 49
在dos窗口下键入python prog.py –sum 4 5 6 –square 7,按回车键我们来看一下运行结果:
结果:15 49