python - 为什么导入 win32ui 后脚本不会退出

标签 python pywin32

我在 Windows 7 下使用 Python 2.7.2 遇到了一个非常奇怪的意外问题..

此代码不会退出:

import gtk
import win32ui
w = gtk.Window()
w.connect("destroy", gtk.main_quit)
w.show_all()
gtk.main()
print 'stop-point'
quit()

窗口关闭,我得到“停止点”,一切都应该没问题。 但控制台没有关闭。 即使 quit() 也没有帮助。

问题出在import win32ui 如果我删除它,一切都会正常。

此外,在版本中仅包含

import gtk
import win32ui

一切正常。

win32ui有什么问题? 如何强制关闭我的应用程序?

即使没有 GTK,也会发生:

import win32gui, win32ui

try:
    result = win32gui.GetOpenFileNameW()
except win32gui.error as result:
    pass
print result

# script ends but python doesn't exit

最佳答案

该问题是由 pywin32 中的错误引起的:https://sourceforge.net/tracker/?func=detail&aid=3562998&group_id=78018&atid=551954

我想出了一个可怕的 hack,作为解决方法,直到 pywin32 中的错误得到修复。将此代码放在退出例程的末尾。在执行此操作之前,请尽可能多地进行清理。解决方法是使用 Windows taskkill 工具终止当前任务。

import os

# kill this process with taskkill
current_pid = os.getpid()
os.system("taskkill /pid %s /f" % current_pid)

将上面的代码注册为 atexit 的函数可能允许 Python 首先进行一些清理:

import atexit, os

def taskkill_this():
    # kill this process
    current_pid = os.getpid()
    os.system("taskkill /pid %s /f" % current_pid)

atexit.register(taskkill_this)

关于python - 为什么导入 win32ui 后脚本不会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10467225/

相关文章:

python - 从 win32evtlog.EvtQuery 结果中获取一个事件对象

python - 在 python 中使用 native 文件管理器复制文件

python - 使用 Python/Win32 选择和删除 Word 文档中存在的行

python - 使用生成器或理解从字典中创建一个二元组列表?

python - 在多处理中使用共享列表的正确方法是什么

python - 如何在 python 中的 SparkSession 上启用 ssl

python - 找不到满足要求的版本 pywin32==221

python - 如何将python模块复制到python lib目录

python - 根据第二个列表将 Python 列表拆分为自定义 block 大小

python - 如何查看一段时间内收到的所有邮件?