python - 使用 win32com.client.dispatch 函数在 python 中打开 Excel 和 Word 时的不同行为
问题描述
我是python开发的新手。
我正在尝试练习 win32com.client 模块,并且出现了一些非常困惑的错误。
首先,我试过了。
import win32com.client
word = win32com.client.Dispatch("Word.Application")
word.Visible = True
显然,它运作良好。所以我在下面尝试了。
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
它像 Word 一样工作,但几秒钟后就关闭了。我不知道为什么会这样。
解决方案
看起来 Word 的行为并不像它应该的那样直接。Word 应用程序必须由gc模块进行垃圾收集,但事实并非如此。您可以input
在解释器中使用终止执行的肤浅视图:
import win32com.client
app = win32com.client.Dispatch("Excel.Application")
app.Visible = True
input('deleting reference...')
# deleting reference forces gc to clear Excel
# though Word remains uncollected even thereafter
del app
input('Exit...')
Python 内存管理相当复杂,当 Python 嵌入到其他应用程序中时,它就会成为一个问题。您可以在文章Python 如何管理内存?(可能已经过时,但可能有助于共同理解)或 Python 的文档Memory Management。
好的方法是使用Quit
从内存中正确释放应用程序的方法显式关闭它:
app.Quit()
推荐阅读
- javascript - 内部方法 [[GetOwnProperty]]
- c# - 从 System.Security.Cryptography 获取相同的加密字符串
- mongodb - 大数据仓库的非关系型数据库设计
- swift - 在 UIView 内播放视频剪辑到视图边界
- python - 如何从 Python 中的列表中获取特定值
- haskell - 为什么静态箭头泛化箭头?
- javascript - 放置复选标记时将文本复制到不同的文本区域
- json - Scala - 如何使用 json-path 拆分所有 List Json 节点列表
- kotlin - 访问数组内的变量 [Kotlin]
- flutter - Flutter - 如何删除字符串中最后一个'/'之后的文本