我有一个程序,需要一些清理后,退出,并已编写了一个独立的.py文件。但是,我使用的程序在一个部分处于无限循环中:
pythoncom.PumpMessages()
正因为如此,没有“自然”关闭的程序。唯一的方法是结束任务管理器的过程。
因此,我问:在任务管理器结束后,是否有办法自动运行我清理好的python脚本?
编辑:--我可以以一种不同的方式将它放入一个无限循环中,例如,如果它有帮助的话:
while True:
pythoncom.PumpWaitingMessages()
发布于 2013-07-27 09:43:55
下面是我的项目的样本:
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等效。
发布于 2013-07-27 09:46:22
您可以从单独的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)
发布于 2013-07-27 09:42:19
在unix中,当您杀死一个进程时,您会向它发送一个信号。例如,CTRL会导致发送给程序的信号.
在windows上,一些信号被仿真,包括CTRL。如果您的循环没有调用阻止CTRL信号的函数,那么您可以按下CTRL来终止该循环。您是否可以尝试使用CTRL来终止您的程序,而不是通过任务管理器来完成它?
如果是这样的话,您可以编写一个处理程序来捕获CTRL信号,清理程序状态和sys.exit()
。
下面是捕获信号的代码:How do I capture SIGINT in Python?
https://stackoverflow.com/questions/17900585
复制相似问题