COM:excelApplication.Application.Quit()保留该过程
我正在使用COM
集成从Python 2.7驱动MS Excel。 我注意到一个奇怪的事情:当我运行以下代码:
import win32com.client excelApp = win32com.client.dynamic.Dispatch('Excel.Application')
EXCEL.EXE
进程出现在进程列表(哪个视图使用Windows任务pipe理器或subprocess.Popen('tasklist')
)如预期。 然后我做所有我需要做的事情没有问题。 但是,当我closuresExcel时:
excelApp.Application.Quit()
这个过程依然存在,即使我closures了启动它的Python解释器(这种情况是有道理的,因为Excel运行在不同的过程中,但是可以肯定)。 我发现终止这个过程的唯一方法是手动,使用任务pipe理器,或通过调用:
subprocess.Popen("taskkill /F /im EXCEL.EXE",shell=True)
强制/F
标志是必要的,否则进程不会终止。
这不是一个真正的问题(我希望),但我想问,当我第一次编辑文档“正常”,然后从python调用Excel,然后再“正常”,这是否会导致问题? 可能连续数十次(几十次)? 我担心的是创build冲突版本的文件等。或者我应该只是终止EXCEL.EXE
过程每次只是为了安全?
另外我注意到subprocess.Popen("taskkill")
不会返回任何可以catch
exception和anylse(或者我在这里做些什么?)。 我特别感兴趣的是区分“不存在的进程”kill命令和终止进程的失败尝试。
尝试closures任何打开的书籍,告诉应用程序退出并删除对应用程序的任何引用。 我通常把我的COM对象包装在一个类中。 这就是我的退出方法。
def quit(self): self.xlBook.Close(SaveChanges=0) self.xlApp.Quit() del self.xlApp
你是从主线程调用Dispatch吗? 如果不确定打电话
pythoncom.CoInitialize()
在派遣前,和
pythoncom.CoUninitialize()
退出后