分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

curlini project的感悟

发布时间:2023-11-01 15:52责任编辑:沈小雨关键词:url

闲来无事,在github上发现一个很有趣的project curlini,实现命令行对ini文件的增删改查和merge操作。起初会觉得至于如此小题大做么,但查阅之后,发现该项目对文件的操作比较精细,从文件锁FileLock、临时文件tempfile、SHA256 hashlib、退出执行atexit、shutil文件操作都使人眼前一亮。

contextlib上下文管理器

使用装饰器 contextlib.contextmanager() 将一个生成器函数转换为上下文管理器,在yield前,为前置操作,在__enter__中执行,yield为后置操作,在__exit__执行

举个例子:

import contextlibimport os@contextlib.contextmanagerdef remove_file_on_error(path): ???try: ???????print("befor yield...") ???????yield ???????print("after yield....") ???except Exception as e: ???????if os.path.exists(path): ???????????os.unlink(path)with remove_file_on_error(‘caesar‘): ???# some file operation ???print("d")

在contextlib库的GeneratorContextManager中定义被装饰的方法,在__enter__时,调用生成器的next方法(self.gen.next),所以会执行yield前面的操作。在yield返回None之后,__enter__执行完毕。

开始调用上下文的Body,即例子中的print("d")。调用完成后,继续调用GeneratorContextManager的__exit___方法(self.gen.next)执行yield的后面部分,完成后抛出StopIteration异常结束。

在contextlib库中 contextmanager 中对GeneratorContextManager进行调用,形成装饰器,可以很方便实现上下文管理,更重要的是在方法前、方法后、异常中进行操作。

python中os操作

os.unlink(filepath)  删除filepath文件

f=os.fileno() 获取文件对象,返回一个int数字

os.write(f, data) 向f 对象中写入data,os.flush()刷入文件

sys.stdin.read() 从输入流中读取数据,特别适合python 命令行和shell命令行在一起使用的场景。

curlini project的感悟

原文地址:https://www.cnblogs.com/CaesarLinsa/p/10802347.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved