精华内容
下载资源
问答
  • 设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。 设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试...
    设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。

    设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。

    如何在Python退出时强制运行一段代码如何在Python退出时强制运行一段代码

    这段逻辑本身非常简单:

    setup() 
    test() 
    clean() 
    

    但由于测试的代码比较复杂,你总是在调试的时候程序异常,导致每次clean()函数还没有来得及运行,程序就崩溃了。

    你可能想到,如果这样写会怎么样呢:

    setup() 
    try: 
        text() 
    except Exception as e: 
        print('运行异常:', e) 
    clean() 
    

    似乎看起来,程序一定会运行到clean()函数,但是,如果你代码写的多,你就应该知道,滥用try...except...会让你非常痛苦。例如它突然给你打印一个运行异常: 1。你根本不知道是哪里出了问题,也不知道具体出了什么问题。为了找到问题,你必须让程序把错误爆出来。但这样一来,clean()又不能正常运行了。

    有什么办法,既能让程序报错,又能在报错已经还能运行clean()呢?

    这个时候,我们就可以使用Python自带的atexit这个模块了。它的使用方法非常简单:

    import atexit 
    @atexit.register 
    def clean(): 
        print('清理环境相关的代码')  
    setup() 
    test() 
    

    这样一来,我们不需要显式调用clean函数了。无论程序正常结束,还是程序异常报错,clean函数里面的内容总会执行。

    如下图所示:

    如何在Python退出时强制运行一段代码如何在Python退出时强制运行一段代码

    atexit使用中有下面几个注意事项:

    你可以注册多个退出函数,他们会按照注册时间从晚到早以此执行。例如:

    import atexit 
    @atexit.register 
    def clean_1(): 
        ...  
    @atexit.register 
    def clean_2(): 
        ... 
    会先运行clean_2()后运行clean_1()
    

    如果clean()函数有参数,那么你可以不用装饰器,而是直接调用atexit.register(clean_1, 参数1, 参数2, 参数3='xxx')。
    如果程序是被你没有处理过的系统信号杀死的,那么注册的函数无法正常执行。
    如果发生了严重的Python内部错误,你注册的函数无法正常执行。
    如果你手动调用了os._exit(),你注册的函数无法正常执行。

    本文地址:https://www.linuxprobe.com/python-piece-of-code.html

    展开全文
  • python 如何优雅地退出子进程

    万次阅读 2016-07-13 15:54:47
    python 如何优雅地退出子进程主进程产生子进程,子进程进入永久循环模式。当主进程要求子进程退出时,如何能安全地退出子进程呢?参考一些代码,我写了这个例子。运行之后,用kill pid试试。pid是主进程的pid。当然...

    python 如何优雅地退出子进程

    主进程产生子进程,子进程进入永久循环模式。当主进程要求子进程退出时,如何能安全地退出子进程呢?

    参考一些代码,我写了这个例子。运行之后,用kill pid试试。pid是主进程的pid。当然子进程的也没问题。

    1)如果kill pid为子进程的pid,当所有子进程都kill掉了,主进程就关闭了。这也是我们想要的结果。

    2)如果kill pid为主进程的pid,主进程向子进程发送退出信号,然后等全部子进程关闭后退出。

    保证了主进程在所有子进程退出之后退出。

    #-*- coding: UTF-8 -*-
    # graceful_exit_event.py
    #   UTF-8 without BOM
    #
    # refer:
    #   http://stackoverflow.com/questions/26414704/how-does-a-python-process-exit-gracefully-after-receiving-sigterm-while-waiting?rq=1
    #   http://www.cnblogs.com/kaituorensheng/p/4445418.html
    # init created: 2016-07-13
    # last updated: 2016-07-14
    #
    #######################################################################
    import os
    import signal
    import multiprocessing
    
    
    class GracefulExitException(Exception):
        @staticmethod
        def sigterm_handler(signum, frame):
            raise GracefulExitException()
        pass
    
    
    class GracefulExitEvent(object):
        def __init__(self):
            self.workers = []
            self.exit_event = multiprocessing.Event()
    
            # Use signal handler to throw exception which can be caught
            # by worker process to allow graceful exit.
            signal.signal(signal.SIGTERM, GracefulExitException.sigterm_handler)
            pass
    
        def reg_worker(self, wp):
            self.workers.append(wp)
            pass
    
        def is_stop(self):
            return self.exit_event.is_set()
    
        def notify_stop(self):
            self.exit_event.set()
    
        def wait_all(self):
            while True:
                try:
                    for wp in self.workers:
                        wp.join()
    
                    print "main process(%d) exit." % os.getpid()
                    break
                except GracefulExitException:
                    self.notify_stop()
                    print "main process(%d) got GracefulExitException." % os.getpid()
                except Exception, ex:
                    self.notify_stop()
                    print "main process(%d) got unexpected Exception: %r" % (os.getpid(), ex)                
                    break
            pass
    
    
    #######################################################################
    def worker_proc(gee):
        import sys, time
        print "worker(%d) start ..." % os.getpid()
        try:
            while not gee.is_stop():
                # do task job here
                print ".",
                time.sleep(1)
            else:
                print ""
                print "worker process(%d) got exit event." % os.getpid()
                print "worker process(%d) do cleanup..." % os.getpid()
                time.sleep(1)
                print "[%d] 3" % os.getpid()
                time.sleep(1)
                print "[%d] 2" % os.getpid()
                time.sleep(1)
                print "[%d] 1" % os.getpid()
    
        except GracefulExitException:
            print "worker(%d) got GracefulExitException" % os.getpid()
        except Exception, ex:
            print "Exception:", ex
        finally:
            print "worker(%d) exit." % os.getpid()
            sys.exit(0)
    
    
    if __name__ == "__main__":
        import sys
        print "main process(%d) start" % os.getpid()
    
        gee = GracefulExitEvent()
    
        # Start some workers process and run forever
        for i in range(0, 10):
            wp = multiprocessing.Process(target=worker_proc, args=(gee,))
            wp.start()
            gee.reg_worker(wp)
    
        gee.wait_all()
        sys.exit(0)
    

    需要说明的是:

    如果某个进程接受 kill pid,必须在该进程函数的最外层捕获: except GracefulExitException,

    同时该进程函数内部调用捕获了 except Excetion,则必须在之前捕获GracefulExitException,

    即:

          (2) 必须在(3)之前。否则同时去掉(2)和(3)。


    def do_some_func():
        try:
            time.sleep(10)
    
            blablabla
    
        (1) except SomeError:
            # 捕获特定的异常
            pass
    
        (2) except GracefulExitException:
            # 接收 kill pid
            pass
    
        (3) except:  # 不建议捕获默认异常, 否则必须在此之前捕获:GracefulExitException
            pass
    
    
    
    def some_process_main(gee):
    
        try:
    
            while not gee.is_stop():
                do_some_func()
    
        except GracefulExitException:
            # 接收到了 kill pid, 设置中止循环
            gee.notify_stop()
            pass
        except:
            pass
    


       







    展开全文
  • 如图在 help 界面时,想要回到原本书写界面,按 q 就可以了,网上也有的说可以 Ctrl + d Ctrl+z 可以。 或者什么都不输入,直接回车键退出
    1. 如图在 help 界面时,想要回到原本书写界面,按 q 就可以了,网上也有的说可以 Ctrl + d

    Ctrl+z 可以。

    或者什么都不输入,直接回车键退出。

    展开全文
  • 设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。 这段逻辑本身非常简单: setup()test()clean() 但由于测试的代码比较复杂,你总是在调试的...

    设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。

    这段逻辑本身非常简单:

    setup() test() clean()

    但由于测试的代码比较复杂,你总是在调试的时候程序异常,导致每次clean()函数还没有来得及运行,程序就崩溃了。

    你可能想到,如果这样写会怎么样呢:

    setup() try:     text() except Exception as e:     print('运行异常:', e) clean()

    似乎看起来,程序一定会运行到clean()函数,但是,如果你代码写的多,你就应该知道,滥用try...except...会让你非常痛苦。例如它突然给你打印一个运行异常: 1。你根本不知道是哪里出了问题,也不知道具体出了什么问题。为了找到问题,你必须让程序把错误爆出来。但这样一来,clean()又不能正常运行了。

    有什么办法,既能让程序报错,又能在报错已经还能运行clean()呢?

    这个时候,我们就可以使用Python自带的atexit这个模块了。它的使用方法非常简单:

    import atexit  @atexit.register def clean():     print('清理环境相关的代码')  setup() test()

    这样一来,我们不需要显式调用clean函数了。无论程序正常结束,还是程序异常报错,clean函数里面的内容总会执行。

    如下图所示:

    2.png

    atexit使用中有下面几个注意事项:

    • 你可以注册多个退出函数,他们会按照注册时间从晚到早以此执行。例如:

    import atexit 
     
    @atexit.register 
    def clean_1(): 
        ... 
     
    @atexit.register 
    def clean_2(): 
        ...

    会先运行clean_2()后运行clean_1()

    • 如果clean()函数有参数,那么你可以不用装饰器,而是直接调用atexit.register(clean_1, 参数1, 参数2, 参数3='xxx')。

    • 如果程序是被你没有处理过的系统信号杀死的,那么注册的函数无法正常执行。

    • 如果发生了严重的Python内部错误,你注册的函数无法正常执行。

    • 如果你手动调用了os._exit(),你注册的函数无法正常执行。

    展开全文
  • “ 阅读本文大概需要 2 分钟。 ”设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。这段逻辑本身非常简单:setup() te...
  • 跳出函数:可以通过return、break、continue来跳出函数,退出范围从大到小,可以通过查看下方代码理解 return:直接返回函数,所有该函数体内的代码(包括循环体)都不会再执行,实例如下方代码:(运行结果为:...
  • 文章目录在Windows上双击运行Python程序不会自动退出的方法前言将python...本文描述了如何在Windows上双击运行Python程序,即使发生错误也不会自动退出的方法。 环境和工具: Windows 10 Python 3.7 Windows x86-64 ex
  • 总体思路:设置一个线程,用来实时获取用户的输入,然后每次播放完后根据对应输入进行播放停止、继续和退出操作。 这里以图片播放控制为例,不多说,直接上代码: import cv2 as cv import os from threading ...
  • 如何在Linux下运行Python脚本

    千次阅读 2019-07-20 21:37:38
    1、使用python的IDEL运行python 如果你的Linux安装了python,Ctrl+Alt+T打开Terminal后输入指令:...使用exit()退出python环境 该环境下与MATLAB很像 (1)查看python版本:python idle下面输入: import sys s...
  • 如果这个异常没有被捕获,那么python编译器将会退出,后面的程序将不会执行。2.如果这个异常被捕获(try...except...finally),捕获这个异常可以做一些额外的清理工作,后面的程序还会继续执行。注:0为正常退出,...
  • matlab中如何退出运行程序代码加拿大广播公司 该文件是使用脚本自动生成的。 要进行更改,请编辑或生成脚本。 CBC(C OIN-或b牧场和c UT)是线性规划解算器用C ++编写的开放源码混合整数。 它可以用作可调用库或使用...
  • 在你可以试试这个:您应该下载pygame和python版本您必须为系统退出导入pygame&sys,然后从导入pygame.locals游戏.这是剧本import pygame, sysfrom pygame.locals import *pygame.init()window = pygame.display.set_...
  • python-docker-exit 构建镜像,运行容器 docker-compose up -d 查看 docker-compose ps 停下来 这应该远远少于 10 秒。 time docker-compose stop 检查退出代码 docker-compose ps 退出代码应为 0。
  • 在linux操作系统中,如何利用Python调用shell命令 ...结果: 执行的运行command命令,加上command命令执行完毕后的退出状态。 使用: import os os.system(command) 例如 os.system('ls') 和os.sys...
  • import urllib2 import re website = urllib2.urlopen(http://www.bxwx.org/b/5/5383/) html = website.read() links = re.findall('"((http|ftp)s?://.*?...我代码这样,不知道为什么一运行退出了。
  • python中return如何

    2021-01-21 15:31:04
    程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return。 例如: def haha(x,y):  if x==y:  return x,y print(haha(1,1)) 结果:这种return传参会返回元组(1, 2) 2、但是也并不意味着...
  • 如何在linux系统的服务器上创建新用户,并运行python图形化界面 使用secureCRT新建连接,输入hostname登陆,例如“192.1681.1.83” 使用命令“su”来获取root权限 使用命令“useradd -d /usr/liye -m liye”创建usr...
  • 一、python: ubuntu16.04默认安装python2 可以用ctrl+alt+t打开终端输入:pyton -V 来查看python版本 安装G++编译:sudo apt-get install g++ 新建一个文本文件,名字叫1.py,写入helloworld代码并保存退出: print(...
  • ``` def process(func,msg): def wrapper(*args,**kwargs): ...我想让process装饰器先判断是否条件成立,再决定是否运行这个函数,但是process中需要msg才能正常运行如何让process获取到msg呢
  • 运行结果如下 代码中的else子句属于for循环结构的一部分,是对for循环由于序列遍历结束而自然退出时所做的处理。当for循环自然结束退出时,表示break语句并未执行到,即没有找到任何一个i是n的约数,因此判定
  • python中return的用法1、return语句就是把执行结果返回到调用的地方,并把程序的控制权一起返回程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return。例如:defhaha(x,y):ifx==y:returnx,y...
  • python如何调用shell

    千次阅读 2014-09-28 19:30:28
    python调用shell命令的方法有许多 1.1 os.system(command) ... 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行co
  • python在服务器后台运行(nohup)

    万次阅读 2018-04-22 20:52:46
    网上有很多nohup的例子,SSH连接服务器后,使用nohup python xxxxx.py &就可以有效实现。但是使用后发现并不管用,研究了很多天不知道如何解决。后来偶然发现使用完nohup后,千万不能直接关闭SSH,要使用...
  • 但是爬虫程序通常是写了死循环,或直到分配给该进程的任务都跑完才退出的。如果我们想中途结束掉这些任务,是没办法手工一个一个kill掉的。那么该如何结束这些进程呢? 我的方法就是在运行爬虫进程时,记录该进程的...
  • python

    2016-03-18 20:25:17
    如何运行:  Windows 环境 cmd 命令行输入 python 进入编程界面;  用文本编辑器写一个 .py 结尾的文件, 并保存,退出文本编辑器,然后在命令行输入:$python 加上文件名;来运行这个文件。 基本知识:  ...
  • 根据网上教程学会了如何打包Python程序,但是运行exe文件时,窗口一闪而过,根本看不清内容。又在网上查找解决方法,如输入:raw_input("Press "),但是会报错,可能跟Python的版本有关。 经过测试只要在程序的末尾...
  • 编程语言在进行编程时,都需要借助一定的集成开发环境和代码编辑器,Python编程亦如此,以下是在Python初学者在选择Python编辑器时,可以从以下几个方面着手: ...类似的是,如果你必须退出编辑器来运行Pyth...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 178
精华内容 71
关键字:

python如何退出运行

python 订阅