python之argparse

argparse 是 Python内置的用来处理命令行参数的库。写脚本时有时会用到,这里略做总结便于以后使用。

1 使用sys.argv模块:

脚本有时候需要传入一些命令参数:

  • 在C语言里,main函数原型为int main(int argc, char ** argv) , 其中argc表示传入参数的个数,argv指向参数的指针数组
  • python也有类似写法,命令行参数时存储在sys.argv里。
import sys
if __name__ == '__main__':
    # 打印所有参数
    for arg in sys.argv:
        print(arg)
    
    # 第一个arg指的是此脚本,传入的第一个参数,应该取第二个
    print(sys.argv[1])

2 使用argparase模块:

2.1 argparase模块的常见写法

import argparse
# main函数入口,添加参数
if __name__ == '__main__':
    parser = argparse.ArgumentParser()   # 创建一个解析对象
    parser.add_argument()                # 向该对象添加参数
    args = parser.parse_args()           # 解析参数

2.2 argparse.ArgumentParser()函数

ArgumentParser常用参数description,大部分情况只会用到这个参数。

parser = argparse.ArgumentParser(description='argparase test')

2.3 parser.add_argument()函数

添加参数的形式:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
参数 形式
name or flags 名字可以写很多个,一般写两个,一个短参数,一个长参数
可选选项位置不固定:
parser.add_argument(“-f”, “–file”, help=”test file”)
位置固定的选项,调用属性也与sys.argv相同:
parser.add_argument(“bar”, help=”test”)
nargs 表示这个参数后面的value有多少个
如-n 1 2 3 4来设置 n = [1 2 3 4],则可用如下方式(+表示至少一个,?表示该位置参数要么没有,要么就只要一个)
parser.add_argument(“-n”, “–num”, nargs=”+”, type=int)
default 如果命令行中没有出现这个选项,则使用default指定的默认值。如:
parser.add_argument(“-f”, “–file”, help=”test file”, default="test.txt")
type 如果希望传进来的参数时指定的类型,可以用type限定(如float、 int or file)
parser.add_argument(“-x”, type=int)
choices 设置参数值的范围,如果choises中的类型不是字符串,需要指定type。如:
parser.add_argument(“-y”, choices=[‘a’, ‘b’, ‘d’])
required 通常可选选项(如-f等)可有可无,但如果required=True,则成为必须项
metavar 参数的名字,在显示帮助信息是才用到
help 设置这个选项的帮助信息
dest 解析后的参数名称
action argparse内置6种动作可以在解析参数时触发:
store 保存参数值,可能会先将参数值转换成另一个数据类型,默认该动作
store_const 保存一个被定义为参数规格的值(由const定义,见示例)
store_true/store_false 保存相应的布尔值。被用于实现布尔开关
append 将值保存到一个列表中。若参数重复出现,则保存多个值。
append_const 将一个定义在参数规格中的值保存到一个列表中。
version 打印关于程序的版本信息,然后退出

2.4 argparase模块使用示例

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))

结果:

$ py_test.py  -h
usage: py_test.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)
PS E:\mine\wiki\git> python3 E:\mine\wiki\git\py_test.py  77 10 55
77
PS E:\mine\wiki\git> python3 E:\mine\wiki\git\py_test.py  77 10 55 --sum
142

可见默认是求数列最大值(max),如果传入--sum参数即是求累加和

参考:

1 Python3---argparse 库

posted @ 2022-08-27 13:45  sureZ_ok  阅读(201)  评论(0编辑  收藏  举报