python跨模块动态获取路径读取写入文件报错,以日志为例
最近在写自动化项目的时候,为项目添加了一个日志模块发现在调用日志时会出现一些问题如下:
示例目录:
- 主目录
- 目录A
- 日志模块.py
- 模块A
- 目录B
- 目录D
+模块B
- 目录D
- 目录C
- 日志文档
+日志.log
- 日志文档
- 目录A
编写日志模块时,需要编辑写入日志模块的路径,项目如果要在不同的终端上调试,我们一般会采用以下写法:
import logging
import os
import re
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
pwd = os.path.abspath('.')
pwd2 = pwd2+'../目录C/日志文档/日志.log'
logging.basicConfig(filename=pwd2,
level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT)
若采用此种写法,在模块A调用日志模块时,一切正常因为pwd的指向目录与日志模块内一致。
但在模块B调用日志模块时,pwd的指向为模块B的路径,此时日志将会找不到目标,报错:No such file or directory
为了解决这个问题,我们可以将日志获取的方式改变为半动态获取,代码如下:
import logging
import os
import re
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
pwd = os.path.abspath('.')
r = r'D.*自动化测试'
pwd2 = re.findall(r, pwd)[0]
pwd3 = pwd2+'/auto/logs/jdy.log'
logging.basicConfig(filename=pwd3,
level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT)
我的日志模块文件路径如下:D:\platform\开发库\doc\06测试阶段\自动化测试\auto\项目名称\autoofmain\public
日志写入文件目录如下:D:\platform\开发库\doc\06测试阶段\自动化测试\auto\logs\nohup.log
在多人开发时,利用正则表达式获取“D:\platform\开发库\doc\06测试阶段\自动化测试”字符串,拼接字符串时采用绝对路径,这样多人同时在本地的D盘开发,在项目路径不一致调用层次不一致的情况下,都能够指向.log文件,可以解决动态获取文件路径出错的问题。
可能写的不是很清晰,如有疑问可以留言。