独自快乐|嵌入式软件开发助手(1),Python实用案例编程入门:第二十章( 二 )


[LOCAL]local_code_directory=C:local_repocode_dir[COMPILE_SERVER]ip=10.10.10.10port=2220.3.2logging模块logging模块正如其名 , 是用来记录日志的 , 可以灵活设置帮助记录程序运行过程或辅助定位问题 。 支持不同的日志等级 , 可以很方便的设置级别 , 使调试版本和发布给别人的版本使用不同的日志级别 。 可以将日志打印在串口 , 也可以保存在日志文件中 。 还可以自定义日志信息的格式 , 使其更易于阅读 。
我们的程序中将定义如下日志信息格式 , 及具体使用的方法 。 通过logging.debug() , logging.info()和logging.error()等不同接口来记录日志信息 。 我们这里设置的level为logging.INFO级别 , 因此DEBUG级别的信息不会在日志中出现 。 当需要调试定位问题时 , 可以将日志级别修改为DEBUG , 则所有日志信息都会被保存 。
下面代码是我们程序中使用logging的代码片段 。
defrepair_core_dump_file(self,dump_file,core_file):sp=[0,0,0,0]lr=[0,0,0,0]pc=[0,0,0,0]self.get_reg_from_dump_file(dump_file,13,sp)self.get_reg_from_dump_file(dump_file,14,lr)self.get_reg_from_dump_file(dump_file,15,pc)logging.info("sp:0x{}".format(''.join(sp)))logging.info("lr:0x{}".format(''.join(lr)))logging.info("pc:0x{}".format(''.join(pc)))withopen(core_file,'rb')ascoreHandle:content_by_hex=coreHandle.read().hex()rs=content_by_hex.rfind(''.join(sp))ifrs!=-1:content_by_hex=content_by_hex.replace(''.join(sp)+'0000000000000000',''.join(sp)+''.join(lr)+''.join(pc))withopen('repaired-'+core_file,'wb')asnew_coreHandle:content_by_binary=binascii.unhexlify(content_by_hex)new_coreHandle.write(content_by_binary)logging.info("Position:{}is{}".format(rs,content_by_hex[rs:rs+8]))logging.info("Position:{}is{}".format(rs,content_by_hex[rs+8:rs+16]))logging.info("Position:{}is{}".format(rs,content_by_hex[rs+16:rs+24]))logging.info("content_by_hex={}".format(content_by_hex))logging.info("SP000hintcount:{}".format(content_by_hex.count(''.join(sp)+'0000000000000000')))logging.info("sphintcount:{}".format(content_by_hex.count(''.join(sp))))20.3.3os模块os模块是一个比较常用的模块 , 从名字就可以看出跟操作系统相关 。 比如需要获取当前工作目录时 , 可以通过getcwd()接口 。 也可以很容易的将路径中的文件夹部分和文件名部分进行分离 。
>>>importos>>>os.getcwd()'C:Users刚刚刘'>>>os.path.abspath('.')'C:Users刚刚刘'>>>>>>path=r'E:第09章爬虫下载voa每日广播英语MP3文件auto-download-voa-broadcast.py'>>>os.path.split(path)('E:第09章爬虫下载voa每日广播英语MP3文件','auto-download-voa-broadcast.py')>>>我们这里的程序将使用os模块判断文件是否存在 , 代码如下 。
>>>path=r'E:第09章爬虫下载voa每日广播英语MP3文件auto-download-voa-broadcast.py'>>>os.path.exists(path)True>>>20.3.4re模块re模块是Python的正则表达式模块 , 跟其他语言的正则表达式一样 , 该模块提供正则表达式相关的处理 。 当然 , 该模块定义了一堆正则表达式相关的语法 , 需要使用的读者可以进行详细的学习 。 我们的程序这里只使用了sub接口 , 这里的用法是将字符串data中的'rn'替换为'n' 。 如前面实现思路中提到的 , 我们需要将windows的换行符替换为linux的换行符 , 而这里就是在做这件事情 , 实现该功能的函数如下所示 。
defdos_to_unix( src_file,dst_file):withopen( src_file,'rb+')asFOBS:data=https://pcff.toutiao.jxnews.com.cn/p/20200825/FOBS.read()ifb'rn'notindata:#ifdon'thaveMSnewline,returndirectlyreturnFalsedata=https://pcff.toutiao.jxnews.com.cn/p/20200825/re.sub(b'rn',b'n',data)withopen(dst_file,'wb')asDOBS:DOBS.write(data)returnTrue更多关于该模块的详细内容 , 可以参考下面的链接 。


推荐阅读