ste*_*nci 5 python cherrypy win32com python-3.x
以下代码运行良好,但如果从具有错误消息的CherryPy应用程序方法执行,则会失败CoInitialize has not been called:
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
xl.quit()
Run Code Online (Sandbox Code Playgroud)
这篇文章提出了一个适合我的解决方案:
import pythoncom
pythoncom.CoInitialize()
Run Code Online (Sandbox Code Playgroud)
我问的问题是我已经有一个解决方案的原因是(1)我想知道我在做什么(而不是仅仅因为我看过它曾经工作过)和(2) )我不想冒险错过重要的事情(阅读这篇文章让我觉得我错过了一些东西.)
我找不到任何文档pythoncom.CoInitialize(),pythoncom的源代码是以下三行对我没有帮助(Eclipse + pydev也没有说明该方法不存在):
# Magic utility that "redirects" to pythoncomxx.dll
import pywintypes
pywintypes.__import_pywin32_system_module__("pythoncom", globals())
Run Code Online (Sandbox Code Playgroud)
我不记得确切,因为我去年没有使用COM,但我想你必须在你使用它的每个线程中初始化COM(再次我不确定每个COM隔间).由于CherryPy是线程服务器,因此您的请求由不同的线程处理,而不是您自行引导的线程.所以我建议你在你的bootstrap例程中尝试以下方法:
import pythoncom
def onThreadStart(threadIndex):
pythoncom.CoInitialize()
cherrypy.engine.subscribe('start_thread', onThreadStart)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6564 次 |
| 最近记录: |