Python3中win32evtlogutil报错:TypeError需字节对象而非字符串的解决方法
解决win32evtlogutil.ReportEvent的TypeError问题
这个错误很典型——Python 3里字符串和字节流是严格区分的,而win32evtlogutil.ReportEvent的data参数要求传入字节类型(bytes),但你传的是普通字符串(str),所以才会抛出a bytes-like object is required, not 'str'的异常。
给你两种简单直接的修复方案:
方法一:将字符串编码为bytes
把你要传入的字符串通过encode()方法转换成字节流,推荐使用utf-8编码保证兼容性:
win32evtlogutil.ReportEvent( "TEST001", 101, eventType=0, data=(err_log_path + 'error_TEST001.log').encode('utf-8') )
方法二:支持多数据项的场景(可选)
如果需要在事件日志中传递多个内容项,可以把每个字符串单独编码后放入列表:
log_data = [ "错误日志路径提示:".encode('utf-8'), (err_log_path + 'error_TEST001.log').encode('utf-8') ] win32evtlogutil.ReportEvent( "TEST001", 101, eventType=0, data=log_data )
额外提醒:后续如果要从Windows事件日志中读取这些数据,记得用decode('utf-8')把字节流转回到字符串,这样中文或特殊字符就能正常显示了。
内容的提问来源于stack exchange,提问作者funyao
相关产品推荐
相关产品推荐

