【问题标题】:Why script doesn't quit if win32ui is imported如果导入了win32ui,为什么脚本不会退出
【发布时间】:2012-05-15 02:00:55
【问题描述】:

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

【问题讨论】:

  • 英语不是我的母语。这个问题是不是太难了?还是我的拼写不好?
  • 我认为只是没有人知道答案。
  • 我今天遇到了这个问题。它实际上与GTK无关。即使在没有 GTK 的情况下调用 win32 也会使其无法关闭。
  • 我编辑了问题以包含一个不使用 GTK 的示例。希望有人知道这个问题的解决方案!
  • 我在 PyWin32 的 sourceforge 页面上提交了一个错误:sourceforge.net/tracker/…

标签: python pywin32


【解决方案1】:

问题是由pywin32中的一个bug引起的: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)

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多