今天在使用pywin32库操作word文档的时候,每当向word文档输入内容就会报错,部分错误信息如下:
Exception ignored from cffi callback .callback_ptr at 0x0000018937783760>:
Traceback (most recent call last):
File “D:\python\NovaVoiceTyper\myenv\lib\site-packages\sounddevice.py”, line 857, in callback_ptr
return _wrap_callback(callback, data, frames, time, status)
File “D:\python\NovaVoiceTyper\myenv\lib\site-packages\sounddevice.py”, line 2735, in _wrap_callback
File “>”, line 2, in TypeText
pywintypes.com_error: (-2147417842, ‘应用程序调用一个已为另一线程整理的接口。’, None, None)
提示信息说接口被占用,大体意思就是你应用启用了多线程,最开始的那个线程创建了word应用,后面新启动的线程还是调用原来创建的那个word应用,所以会被占用,解决方法就是每次在启动新的线程的时候都创建一次word应用
如我原来代码:
word = win32com.client.Dispatch("Word.Application")
word.Visible = True # 使Word可见
# 打开已有的文档
doc = word.Documents.Open(output_file)
selection = word.Selection
def callback(indata, frames, time, status):
......
selection.TypeText(res)
正确方法应该是把创建word的过程放进callback里,代码应该如下:
......
def callback(indata, frames, time, status):
......
word = win32com.client.Dispatch("Word.Application")
word.Visible = True # 使Word可见
# 打开已有的文档
doc = word.Documents.Open(output_file)
selection = word.Selection
selection.TypeText(res)
这样的话再重新运行应用,就不会报接口被占用的错误了。