我正在使用命令python script.py &在后台运行python脚本。剧本可能是这样的。
import time
def loop():
while True:
time.sleep(1)
if __name__=='__main__':
try:
loop()
except KeyboardInterrupt:
print("Terminated properly")当涉及到终止脚本时,我想在它停止之前进行一些清理(例如打印“正确终止”)。如果我作为当前进程运行,这将由键盘中断后的except语句处理。
使用kill PID命令意味着清理永远不会执行。如何在后台进程终止之前停止后台进程并执行一些代码行?
发布于 2017-10-07 13:54:37
您可以使用信号模块,以捕获任何信号发送到您的脚本通过杀死。您可以设置一个信号处理程序来捕获将执行清理的相关信号。
import signal
import time
running = 0
def loop ():
global running
running = 1
while running:
try: time.sleep(0.25)
except KeyboardInterrupt: break
print "Ended nicely!"
def cleanup (signumber, stackframe):
global running
running = 0
signal.signal(signal.SIGABRT, cleanup)
signal.signal(signal.SIGTERM, cleanup)
signal.signal(signal.SIGQUIT, cleanup)
loop()发布于 2017-10-07 12:57:47
使用finally子句:
def loop():
while True:
time.sleep(1)
if __name__=='__main__':
try:
loop()
except KeyboardInterrupt:
print("Terminated properly")
finally:
print('executes always')https://stackoverflow.com/questions/46620326
复制相似问题