为什么在导入win32ui时脚本不会退出

时间:2012-05-06 00:54:17

标签: 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

1 个答案:

答案 0 :(得分:1)

问题是由pywin32:https://sourceforge.net/tracker/?func=detail&aid=3562998&group_id=78018&atid=551954

中的错误引起的

我提出了一个可怕的黑客攻击,直到修复了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)