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")不会返回任何可以catchexception和anylse(或者我在这里做些什么?)。 我特别感兴趣的是区分“不存在的进程”kill命令和终止进程的失败尝试。

尝试closures任何打开的书籍,告诉应用程序退出并删除对应用程序的任何引用。 我通常把我的COM对象包装在一个类中。 这就是我的退出方法。

  def quit(self): self.xlBook.Close(SaveChanges=0) self.xlApp.Quit() del self.xlApp 

你是从主线程调用Dispatch吗? 如果不确定打电话

 pythoncom.CoInitialize() 

在派遣前,和

 pythoncom.CoUninitialize() 

退出后