当 Gtk 和 win32ui 模块都被导入时,Python.exe 在关闭 Gtk.main() 后保留 运行
Python.exe keeps running after closing Gtk.main() when both Gtk and win32ui modules are imported
我 运行 python 2.7.13 windows 7.
我正在使用 Gtk(来自 pygobject 3.18.2)创建一个 window。
我也使用 win32ui(来自 pywin32 221)。
当我导入两个模块时程序 运行 在我关闭它之前一切正常。 window 正常关闭,但是 python 进程保持 运行ning 并且用于 运行 脚本的 cmd window 没有 return de cmd 提示符。
我必须杀死 python 才能返回提示符
这是一个简单的测试脚本。这在我的系统上没有正确关闭。如果我注释掉
#import win32ui
它会适当关闭
from gi.repository import Gtk
import win32ui
class Window(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("destroy", Gtk.main_quit)
self.show_all()
Window()
Gtk.main()
看起来 Gtk 和 win32ui 之间有冲突。
我需要 win32gui 和 win32ui 来从 pe 文件中提取图标。
我该怎么办?
在以前版本的 PyWin32 上:
https://sourceforge.net/p/pywin32/bugs/609/
https://sourceforge.net/p/pywin32/bugs/636/
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)
似乎是一种解决方法。
经进一步检查,似乎与 pywin32 和 Gtk UI 事件进程冲突有关。如果可能的话,我会建议使用一个或另一个而不是两个,或者使用像上面那样的 taskkill hack。
我还注意到,在我见过的所有情况下,Windows 7 个工作站都发生了这种情况。
我 运行 python 2.7.13 windows 7.
我正在使用 Gtk(来自 pygobject 3.18.2)创建一个 window。
我也使用 win32ui(来自 pywin32 221)。
当我导入两个模块时程序 运行 在我关闭它之前一切正常。 window 正常关闭,但是 python 进程保持 运行ning 并且用于 运行 脚本的 cmd window 没有 return de cmd 提示符。
我必须杀死 python 才能返回提示符
这是一个简单的测试脚本。这在我的系统上没有正确关闭。如果我注释掉
#import win32ui
它会适当关闭
from gi.repository import Gtk
import win32ui
class Window(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("destroy", Gtk.main_quit)
self.show_all()
Window()
Gtk.main()
看起来 Gtk 和 win32ui 之间有冲突。
我需要 win32gui 和 win32ui 来从 pe 文件中提取图标。
我该怎么办?
在以前版本的 PyWin32 上: https://sourceforge.net/p/pywin32/bugs/609/ https://sourceforge.net/p/pywin32/bugs/636/
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)
似乎是一种解决方法。
经进一步检查,似乎与 pywin32 和 Gtk UI 事件进程冲突有关。如果可能的话,我会建议使用一个或另一个而不是两个,或者使用像上面那样的 taskkill hack。
我还注意到,在我见过的所有情况下,Windows 7 个工作站都发生了这种情况。