2024-04-24 10:03:35 发布
网友
我已经创建了一个python脚本,可以在工作时定期抓取网站并将结果存储在.json文件中。这个脚本被设置为在无限循环中不使用命令行运行,所以我可以让它在早上启动,然后在一天中不受阻碍地运行。在
我的问题是,在晚上我会想杀死它,这样我就可以回家了,但是我不想因为在连接或写入过程中终止它而引起任何问题。我想知道在Windows10上创建并销毁这样一个脚本以处理退出行为的正确方法是什么。在
下面是一个使用隐藏窗口监听发送的WM_CLOSE消息的示例taskkill.exe. 在
WM_CLOSE
演示.py
import win32con import win32gui def shutdown_monitor(): def wndproc(hwnd, msg, wparam, lparam): if msg == win32con.WM_CLOSE: win32gui.DestroyWindow(hwnd) return 0 elif msg == win32con.WM_DESTROY: win32gui.PostQuitMessage(0) return 0 return win32gui.DefWindowProc(hwnd, msg, wparam, lparam) wc = win32gui.WNDCLASS() wc.lpszClassName = 'SpamMessages' wc.lpfnWndProc = wndproc win32gui.RegisterClass(wc) hwnd = win32gui.CreateWindow('SpamMessages', 'Python Spam App', 0, 0, 0, 0, 0, 0, 0, 0, None) win32gui.PumpMessages() if __name__ == '__main__': import sys import time import atexit import threading atexit.register(print, 'PYTHON SPAM APP: SHUTDOWN') shutdown_thread = threading.Thread(target=shutdown_monitor) shutdown_thread.start() shutdown_thread.join() time.sleep(1) sys.exit(0x2A)
演示.bat
输出
Quit Test SUCCESS: Sent termination signal to the process with PID 5612. PYTHON SPAM APP: SHUTDOWN ExitCode=0000002A Kill Test SUCCESS: The process with PID 5432 has been terminated. ExitCode=00000001
windows8/10任务管理器不认为这个隐藏的窗口属于一个交互式应用程序,也没有在它的“应用程序”列表中列出进程,这与taskkill.exe它强制终止进程,而不是发布WM_CLOSE。任务管理器可能是另一种方法。在
下面是一个使用隐藏窗口监听发送的
WM_CLOSE
消息的示例taskkill.exe. 在演示.py
演示.bat
^{pr2}$输出
windows8/10任务管理器不认为这个隐藏的窗口属于一个交互式应用程序,也没有在它的“应用程序”列表中列出进程,这与taskkill.exe它强制终止进程,而不是发布
WM_CLOSE
。任务管理器可能是另一种方法。在相关问题 更多 >
编程相关推荐