首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很好地终止后台python脚本

很好地终止后台python脚本
EN

Stack Overflow用户
提问于 2017-10-07 12:51:30
回答 2查看 2.3K关注 0票数 3

我正在使用命令python script.py &在后台运行python脚本。剧本可能是这样的。

代码语言:javascript
复制
import time

def loop():
    while True:
        time.sleep(1)

if __name__=='__main__':
    try:
        loop()
    except KeyboardInterrupt:
        print("Terminated properly")

当涉及到终止脚本时,我想在它停止之前进行一些清理(例如打印“正确终止”)。如果我作为当前进程运行,这将由键盘中断后的except语句处理。

使用kill PID命令意味着清理永远不会执行。如何在后台进程终止之前停止后台进程并执行一些代码行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-07 13:54:37

您可以使用信号模块,以捕获任何信号发送到您的脚本通过杀死。您可以设置一个信号处理程序来捕获将执行清理的相关信号。

代码语言:javascript
复制
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()
票数 2
EN

Stack Overflow用户

发布于 2017-10-07 12:57:47

使用finally子句:

代码语言:javascript
复制
def loop():
    while True:
        time.sleep(1)

if __name__=='__main__':
    try:
        loop()
    except KeyboardInterrupt:
        print("Terminated properly")
    finally:
        print('executes always')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46620326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档