前言
因为这篇文章【毕业设计】基于mqtt+vue+Thinkphp实现校园云打印小程序,我想通过mqtt唤醒客户端调用打印机,但是在实现过程中其他生产环境没办法使用,不是出现报错就是未知错误,期间找了很多方案,最后整合一下我的处理结果,建议大家配合文章查看,不然就搞不懂我在说啥
问题排查
第一个问题,pywintypes.com_error: (-2147221005, ‘无效的类字符串’, None, None)
通过编译后的tk软件在其他电脑上能运行但是不会处理,猜想应该是代码错误导致停止运行了
我的验证方法是,在其他电脑上运行源代码,发现出现错误
pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
解决办法
报错的代码是这一段,大概就是调用wps出错,因为我的wps版本是抢先版,所以需要用kwps
w = DispatchEx('wps.Application') w.Visible = 0 # 不打开软件 w.DisplayAlerts = 0 # 不报错 doc = w.Documents.Open(f)
改了之后的代码,完美运行:
w = DispatchEx('kwps.Application') w.Visible = 0 # 不打开软件 w.DisplayAlerts = 0 # 不报错 doc = w.Documents.Open(f)
只需要装有同个版本的wps即可解决
第二个问题,pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。’, None, None)
原因:经网上查明:是由于多线程使用pywin32com造成的问题
解决办法:
import pythoncom # 线程初始化 pythoncom.CoInitialize() # 程序代码 # 程序代码 # 释放资源 pythoncom.CoUninitialize()
于是在调用打印代码的第一行写入线程初始化
pythoncom.CoInitialize()
末尾释放资源
pythoncom.CoUninitialize()
最后代码:
# 线程初始化 pythoncom.CoInitialize() ## 需要打印文件或文件夹的路径 path = r'C:\Users\MAC\Desktop\test' traver(path) print("文件读取完毕,共有{}个".format(q.qsize())) docx_print() # 释放资源 pythoncom.CoUninitialize()
完美解决以上问题!!!
总结
以上就是记录今天遇到的问题,pywin32api打印机问题完美解决,不过调用的只能是wps