用于提供对Python解释器相关的操作:
sys.argv #命令行参数List,第一个元素是程序本身路径
sys.exit(n) #退出程序,正常退出时exit(0)
sys.version #获取Python解释程序的版本信息
sys.maxint # 最大的Int值
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称
sys.stdin #输入相关
sys.stdout #输出相关
sys.stderror #错误相关
#### sys.argv练习
import sys
for i in sys.argv:
print(i)
#if __name__ == '__main__':
# for item in sys.argv:
# print item
作用: argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docopt
,Click
。
(1)import argparse 首先导入模块
(2)parser = argparse.ArgumentParser() 创建一个解析对象
(3)parser.add_argument() 向该对象中添加你要关注的命令行参数和选项
(4)parser.parse_args() 进行解析
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo') # add_argument()指定程序可以接受的命令行选项
args = parser.parse_args() # parse_args()从指定的选项中返回一些数据
print(args)
print(args.echo)
parser = argparse.ArgumentParser(description = 'this is a description')
parser.add_argument('--ver', '-v', action = 'store_true', help = 'hahaha')
# 将变量以标签-值的字典形式存入args字典
args = parser.parse_args()
if args.ver:
print("Ture")
else:
print("False")
# required标签就是说--ver参数是必需的,并且类型为int,输入其它类型会报错
parser.add_argument('--ver', '-v', required = True, type = int)
parser.add_argument('file', choices = ['test1', 'test2'])
args = parser.parse_args()
print('read in %s'%(args.file))
# 表示脚本可以读入两个整数赋予num键(此时的值为2个整数的数组)
parser.add_argument('filename', nargs = 2, type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))
分析:nargs还可以’*‘用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;‘+’表示读取至少1个该位置参数。’?'表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)
如:
parser.add_argument('filename', nargs = '+', type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))
dest - 设置这个选项的value解析出来后放到哪个属性中
parser.add_argument('-file', choices = ['test1', 'test2'], dest = 'world')
args = parser.parse_args()
print('read in %s'%(args.world))
如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。比如如下名为test.py的脚本:
import sys
print "Input argument is %s" %(sys.argv)
在shell脚本中运行python test.py help可以得到Input argument is help的结果。
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!"
运行python test.py后面跟了–verbose/-v的时候会输出前者,如果什么都没有会输出后者。如果输入了–verbose/-v以外的参数则会报错:unrecognized arguments
稍微提一下,action参数表示值赋予键的方式,这里用到的是bool类型;如果是’count’表示将–verbose标签出现的次数作为verbose的值;'append’表示将每次出现的该便签后的值都存入同一个数组再赋值。(嘛,一般后面两种用的比较少就不多说了)
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)
required标签就是说–verbose参数是必需的,并且类型为int,输入别的类型会报错。
3)位置参数(positional arguments)
位置参数与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
由于没有标签,所以用位置参数的时候需要比较小心。
4)输入类型
之前已经提到了用type参数就可以指定输入的参数类型。而这个type类型还可以表示文件操作的类型从而直接进行文件的读写操作。
parser.add_argument('file', type=argparser.FileType('r')) # 读取文件
args = parser.parse_args()
for line in args.file:
print line.strip()
5)参数默认值
一般情况下会设置一些默认参数从而不需要每次输入某些不需要变动的参数,利用default参数即可实现。
parser.add_argument('filename', default='text.txt')
这个时候至直接运行python text.py就能得到Read in text.txt而不需要输入文件名了。
6)候选参数选择
表示该参数能接受的值只能来自某几个值候选值中,除此以外会报错,用choices参数即可。比如:
parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])
action参数
argparse内置6种动作可以在解析到一个参数时进行触发:
store
保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。
store_const
保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。
store_ture/store_false
保存相应的布尔值。这两个动作被用于实现布尔开关。
append
将值保存到一个列表中。若参数重复出现,则保存多个值。
append_const
将一个定义在参数规格中的值保存到一个列表中。
version
打印关于程序的版本信息,然后退出
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store', dest='simple_value',
help='Store a simple value')
parser.add_argument('-c', action='store_const', dest='constant_value',
const='value-to-store',
help='Store a constant value')
parser.add_argument('-t', action='store_true', default=False,
dest='boolean_switch',
help='Set a switch to true')
parser.add_argument('-f', action='store_false', default=False,
dest='boolean_switch',
help='Set a switch to false')
parser.add_argument('-a', action='append', dest='collection',
default=[],
help='Add repeated values to a list')
parser.add_argument('-A', action='append_const', dest='const_collection',
const='value-1-to-append',
default=[],
help='Add different values to list')
parser.add_argument('-B', action='append_const', dest='const_collection',
const='value-2-to-append',
help='Add different values to list')
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
results = parser.parse_args()
print 'simple_value =', results.simple_value
print 'constant_value =', results.constant_value
print 'boolean_switch =', results.boolean_switch
print 'collection =', results.collection
print 'const_collection =', results.const_collection
$ python argparse_action.py -h
usage: argparse_action.py [-h] [-s SIMPLE_VALUE] [-c] [-t] [-f]
[-a COLLECTION] [-A] [-B] [--version]
optional arguments:
-h, --help show this help message and exit
-s SIMPLE_VALUE Store a simple value
-c Store a constant value
-t Set a switch to true
-f Set a switch to false
-a COLLECTION Add repeated values to a list
-A Add different values to list
-B Add different values to list
--version show program's version number and exit
$ python argparse_action.py -s value
simple_value = value
constant_value = None
boolean_switch = False
collection = []
const_collection = []
$ python argparse_action.py -c
simple_value = None
constant_value = value-to-store
boolean_switch = False
collection = []
const_collection = []
$ python argparse_action.py -t
simple_value = None
constant_value = None
boolean_switch = True
collection = []
const_collection = []
$ python argparse_action.py -f
simple_value = None
constant_value = None
boolean_switch = False
collection = []
const_collection = []
$ python argparse_action.py -a one -a two -a three
simple_value = None
constant_value = None
boolean_switch = False
collection = ['one', 'two', 'three']
const_collection = []
$ python argparse_action.py -B -A
simple_value = None
constant_value = None
boolean_switch = False
collection = []
const_collection = ['value-2-to-append', 'value-1-to-append']
$ python argparse_action.py --version
argparse_action.py 1.0