1. 前言
程序中有很多的参数,在程序中直接改动参数会显得,麻烦而且容易出错,这时候就需要将参数集中到一块,进行统一的改动能够提高我们的开发速率。
2. 配置文件
2.1 文件读取
创建一个 xxx.ini格式的文件,内部格式[ mode_1], [mode_2] 表示一些参数是在不同的集合下的。
相关配置文件的用法
import configparser
config=configparser.ConfigParser()
config.read("./config.ini")
""" sections()是获取所有的[],理解为片段"""
sections=config.sections()
print("section:","",sections)
"""根据section,获取section内所有的参数名称,不涉及具体值"""
options=config.options(sections[0])
options2=config.options(sections[1])
print("option:","",options)
print("option:","",options2)
"""效果与options差不多但是更强大,但是能获得具体的数值,"""
items=config.items('mode_1')
print("items:","",items)
"""根据定位获得具体的数值"""
print("batch,","", config.get("mode_1","batch"))
print('getint:','',config.getint('mode_1', 'channels'))
print('getfloat:' ,' ' , config.getfloat('mode_1', 'lambda'))
print('getboolean:' ,' ', config.getboolean('mode_1', 'save'))
显示结果
2.2 配置文件写入
配置文件写入
list = config.sections() # 获取到配置文件中所有分组名称
if 'mode_4' not in list: # 如果分组type不存在则插入type分组
config.add_section('mode_4')
config.set('mode_4', 'qqq', "133") # “133”比如加引号。
o = open('./config.ini','w')
config.write(o)
o.close() # 不要忘记关闭
结果:
3. 外部传参
3.1 采用sys库进行传参
import sys #引入模块
"""只在外部传入了wokao"""
str = sys.argv[1]
print(len(sys.argv))
str = sys.argv[0]
print ("fisrt str is :",str)
str1 = sys.argv[1]
print ("second str is :",str1)
结果展示,可以看到sys库进行传参的时候,只传入一个参数的时候,sys.argv列表会有两个成员,第一个是本身脚本运行的路径,第二个我们传入的参数。
3.2 使用argparse库
- 创建ArgumentParser() 对象
- 调用add_argument()脚本外添加函数
- 使用parse_args() 解析添加参数
import argparse
parser = argparse.ArgumentParser() #创建对象
parser.add_argument('-a', type=int,default=10,help='input a int') #添加参数
parser.add_argument('-save', action='store_true',help='save model or not')
args = parser.parse_args() #创建解析器进行解析
print(args.a) #输出外部传入的参数
group = parser.add_mutually_exclusive_group()
group.add_argument("-m", "--male", action="store_true")
group.add_argument("-f", "--female", action="store_true")
#互斥参数,group内只能指定一个参数
parser.add_argument("-g", "--gender", default='male',
choices=['male', 'female'])
parser.add_argument()函数内部参数的含义:
- 首个参数a是传入参数的名称,对应使用解析器进行解析。
- type 是指传入参数的类型说明,有 int,float,string,bool等类型。
- default是指该参数的默认数值,有default时,外部不传参也ok,因为该参数已经有默认了。
- action 表示当触发的时候即为真,不触发的时候为假
- help 帮助说明的信息。
- choice 可选值,二选一么
pycharm 中调用输入参数的地方
结果显示:
子解析器
def main_single(name, args):
print("name: ", name)
print("args: ", args)
print("I am main_single")
# 添加一个子解析器
subparsers = parser.add_subparsers()
parser_single = subparsers.add_parser('single',help='run a single module')
# 对single 子解析器添加 action 函数。
parser_single.set_defaults(action=('single', main_single))
# require=True,是说如果命令行指定了single解析器,就必须带上 --name 的参数。
parser_single.add_argument("--name", '-n', action="store",
help="module name to run",
required=True)
args = parser.parse_args()
(name, functor) = args.action
if name in ["single"]:
functor(name, args)