我有一个程序,退出后需要一些清理,并写了一个单独的.py文件。 然而,我使用的程序在一个部分停留在一个无限循环:
pythoncom.PumpMessages()
因此,程序没有“自然”closures。 唯一的办法是从任务pipe理器结束进程。
所以我问:有没有办法,从任务pipe理器结束后,自动运行我的清理python脚本?
编辑:我可以把它放在一个不同的方式在一个无限循环,如这样,如果有帮助:
while True: pythoncom.PumpWaitingMessages()
您可以从单独的python脚本运行这两个脚本,并在运行第二个脚本之前终止第一个进程。
例如使用subprocess.Popen:
proc1 = subprocess.Popen(cmd, shell = True) time.sleep(waititme) #or other flag, such as reading another source proc1.kill() proc2 = subprocess.Popen(cmd2, shell = True)
有我的项目样本:
import signal def term(*args,**kwargs): sys.stderr.write('\nStopping...') do_cleaning_stuff_here() signal.signal(signal.SIGTERM, term) signal.signal(signal.SIGINT, term) signal.signal(signal.SIGQUIT, term) yuor_main_code_here()
无限循环:
import signal def term(*args,**kwargs): global running sys.stderr.write('\nStopping...') running=False signal.signal(signal.SIGTERM, term) signal.signal(signal.SIGINT, term) signal.signal(signal.SIGQUIT, term) running=True while running: handle() cleanup()
Windows信号转换为unix等效。
在unix中,当你杀死一个进程时,你发送一个信号。 例如,CTRL-C导致一个信号发送到程序。
在Windows上,这些信号中有一些是模拟的,包括CTRL-C。 如果你的循环没有调用阻止CTRL-C信号的函数,那么你可以按CTRL-C来终止循环。 你可以尝试用CTRL-C终止你的程序,而不是通过任务管理器来完成吗?
如果这样工作,可以编写一个处理程序来捕获CTRL-C信号,清除程序状态和sys.exit()
。
这是捕获信号的代码: 如何在Python中捕获SIGINT?