argparse及logging的相关用法

argparse用法

用法直接附上代码

import argparse
def get_args():
	# 创建解析器
    parser = argparse.ArgumentParser()
    # 添加参数
    parser.add_argument('--triviaqa_file', help='Triviaqa file')
    parser.add_argument('--squad_file', help='Squad file')
    parser.add_argument('--wikipedia_dir', help='Wikipedia doc dir')
    parser.add_argument('--web_dir', help='Web doc dir')

    parser.add_argument('--seed', default=10, type=int, help='Random seed')
    parser.add_argument('--max_num_tokens', default=800, type=int, help='Maximum number of tokens from a document')
    parser.add_argument('--sample_size', default=8000000000000, type=int, help='Random seed')
    parser.add_argument('--tokenizer', default='tokenizers/punkt/english.pickle', help='Sentence tokenizer')
    parser.add_argument("--no_progress_bar", action='store_true', help="no progress bar. Good for printing")
    parser.add_argument("--attention_mode", type=str, choices=['tvm', 'sliding_chunks'],
                            default='sliding_chunks', help='Which implementation of selfattention to use')
    # 解析参数
    args = parser.parse_args()
    return args
args = get_args()

action=‘store_true’,只要运行时该变量有传参就将该变量设为True

logging用法

参考:https://www.cnblogs.com/xianyulouie/p/11041777.html

默认生成的root logger的level是logging.WARNING,低于该级别的就不输出了

级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

Logging.Formatter:这个类配置了日志的格式,在里面自定义设置日期和时间,输出日志的时候将会按照设置的格式显示内容。

Logging.Logger:Logger是Logging模块的主体,进行以下三项工作:

  1. 为程序提供记录日志的接口
  2. 判断日志所处级别,并判断是否要过滤
  3. 根据其日志级别将该条日志分发给不同handler

用法直接附上代码

import logging
# 初始化日志对象
logging.basicConfig(
    # 日志级别
    level = logging.INFO,
    # 日志格式
    # 时间、代码所在文件名、代码行号、日志级别名字、日志信息
    format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    # 打印日志的时间
    datefmt = '%a, %d %b %Y %H:%M:%S',
    # 日志文件存放的目录(目录必须存在)及日志文件名
    filename = 'd:/report.log',
    # 打开日志文件的方式
    filemode = 'w'
)
# 定义类存储日志信息
def get_logger(filename, print2screen=True):
    # 创建一个logger
    logger = logging.getLogger(filename)
    # 设置logger级别为INFO
    logger.setLevel(logging.INFO)
    # 将日志信息输出到磁盘文件上
    fh = logging.FileHandler(filename)
    # 输出到file的logging等级的开关
    fh.setLevel(logging.INFO)
    #日志信息会输出到指定的stream中,如果stream为空则默认输出到sys.stderr
    ch = logging.StreamHandler()
    # 输出到sys.stderr的logging等级的开关
    ch.setLevel(logging.INFO)
    # 定义handler的输出格式
    formatter = logging.Formatter('[%(asctime)s][%(thread)d][%(filename)s][line: %(lineno)d][%(levelname)s] >> %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # 将logger添加到handler里面
    logger.addHandler(fh)
    # 如果需要输出到控制台,就将ch加入,并返回
    if print2screen:
        logger.addHandler(ch)
    return logger
logger = get_logger(os.path.join(args.save_path, 'train.log'))
logger.info('Building models')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
主程序通常是程序的入口,它会执行程序的初始化操作,调用其他模块的函数和方法以完成程序的功能,并在程序结束时进行清理工作。主程序的具体设计取决于程序的需求和架构。 一般而言,主程序设计应该遵循以下步骤: 1. 程序初始化。在主程序开始运行之前,需要对程序进行初始化,例如读取配置文件、打开数据库连接等。 2. 调用其他模块的函数和方法。根据程序需求,调用其他模块的函数和方法以完成特定的功能。在调用其他模块的函数和方法时,需要确保参数正确、返回值有效等。 3. 处理异常情况。在程序运行过程中,可能会出现异常情况,例如网络连接中断、文件读取失败等。主程序需要对这些异常情况进行处理,例如记录日志、输出错误信息等。 4. 程序结束。在程序结束时,需要进行清理工作,例如关闭数据库连接、释放资源等。 下面是一个 Python 的主程序设计示例: ```python import argparse import logging import sys from mymodule import do_something def main(args): # 初始化 logging.basicConfig(level=logging.INFO) # 调用其他模块的函数和方法 result = do_something(args.input_file) # 处理异常情况 if result is None: logging.error("Failed to do something") sys.exit(1) # 程序结束 logging.info("Done") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("input_file", help="Input file path") args = parser.parse_args() main(args) ``` 在这个示例中,我们使用了 argparse 模块来解析命令行参数,并调用了 mymodule 中的 do_something 函数来完成程序的功能。在程序初始化时,我们使用 logging 模块设置了日志级别。在程序结束时,我们使用 logging 模块输出了一条完成信息。如果 do_something 函数返回了 None,我们使用 logging 模块输出了一条错误信息,并通过 sys.exit 方法退出程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值