Python程序的几种退出方式

该文章已生成可运行项目,

对于如何结束一个Python程序或者用Python操作去结束一个进程等,Python本身给出了好几种方法,而这些方式也存在着一些区别,对相关的几种方法看了并实践了下,同时也记录下。

参考:

Python 核心编程(第二版)

http://www.zhihu.com/question/21187839

 

1. sys.exit()

执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法。

该方法中包含一个参数status,默认为0,表示正常退出,也可以为1,表示异常退出。

1 import sys
2 sys.exit()
3 sys.exit(0)
4 sys.exit(1)

该方法引发的是一个SystemExit异常(这是唯一一个不会被认为是错误的异常),当没有设置捕获这个异常将会直接退出程序执行,当然也可以捕获这个异常进行一些其他操作。

 

2. os._exit()

效果也是直接退出,不会抛出异常,但是其使用会受到平台的限制,但我们常用的Win32平台和基于UNIX的平台不会有所影响。

知乎上有说是调用了C 语言的 _exit() 函数(未考证)

 

3. os.kill()

一般用于直接Kill掉进程,但是只能在UNIX平台上有效。

基本原理:该函数是模拟传统的UNIX函数发信号给进程,其中包含两个参数:一个是进程名,即所要接收信号的进程;一个是所要进行的操作。

操作(第二个参数)的常用取值为:

SIGINT      终止进程     中断进程

SIGTERM   终止进程     软件终止信号

SIGKILL    终止进程      杀死进程

SIGALRM   闹钟信号

例:

在linux平台上打开VLC视频播放器,然后查看运行的进程:进程号是 4497

 

然后执行os.kill操作:

执行完之后可以发现VLC视频播放器已经关闭,同时该进程也已经被Kill了。


 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下边是用os.kill()来关闭程序的两个例子,似乎windows 下也能用


#! /usr/bin/python
# -*- coding: utf-8 -*-
 
import os
import sys
import signal
 
def kill(pid):
 
   try :
     a = os.kill(pid, signal.SIGKILL)
     # a = os.kill(pid, signal.9) # 与上等效
     print '已杀死pid为%s的进程, 返回值是:%s' % (pid, a)
   except OSError, e:
     print '没有如此进程!!!'
 
if __name__ = = '__main__' :
   kill( 8132 )

~~~~~~~~~~~~~~~~~~~~~~~~

        

       run_task_1 2 3,预计会更多,需要一个简单的办法kill掉某一个,或是这是全部kill掉,于是别写了下面的这个脚本

[python]  view plain  copy
  1. #coding=utf-8  
  2. import sys,os  
  3. def kill_crawler(id):  
  4.     cmd = 'ps -ef | grep python'  
  5.     f = os.popen(cmd)  
  6.     txt = f.readlines()  
  7.     for line in txt:  
  8.         colum = line.split()  
  9.         pid = colum[1]  
  10.     name = colum[-1]  
  11.     if name.startswith('run_task_'):  
  12.         task_id = name[9:-3]  
  13.         if task_id == id or id =='0':  
  14.         cmd = "kill -9 %d" % int(pid)  
  15.         rc = os.system(cmd)  
  16.         if rc == 0 :   
  17.                     print "stop \"%s\" success!!" % name  
  18.                 else:  
  19.                     print "stop \"%s\" failed!!" % name  
  20.   
  21. if __name__ =='__main__':  
  22.      
  23.     if not  len(sys.argv)==2:  
  24.     print u'输入要结束的任务编号,0代表停止所有'  
  25.         sys.exit()  
  26.     id = sys.argv[1]  
  27.     kill_crawler(id)  

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

4. Windows下Kill进程

既然在Linux下能够进行上述操作,那么Windows下也能够有相关的操作。

这里使用的是os.popen(), 该方法是用于直接执行系统命令,而在Windows下其实就是使用taskkill来kill掉进程,其基本形式是,

taskkill   /pid   程序的PID号码

可以直接在CMD窗口下试下这个命令....

可以先打开一个计算器程序,然后使用tasklist查看该程序的pid,这里是620,所以对应的Python代码是:

1 import os
2 if __name__ == "__main__":
3     pid = 620
4     os.popen('taskkill.exe /pid:'+str(pid))

 

ok,

本文章已经生成可运行项目
<think>我们正在讨论如何退出正在运行的Python程序。根据用户的问题,他可能指的是以下几种情况: 1. 在程序运行过程中主动退出(例如满足某个条件时退出) 2. 在命令行中运行的Python程序,如何通过外部命令终止它 3. 在开发环境中(如IDLE)如何退出当前运行的程序 根据引用[1]中提到的,在Pygame程序中,我们通常使用`sys.exit()`来退出程序。但退出整个程序方式不止一种。 下面我将分情况讨论:</think>### 如何退出正在运行的 Python 程序 以下是退出 Python 程序的完整方法指南,根据使用场景分类: #### 1. **程序内部主动退出** ```python import sys # 方法1:sys.exit() - 推荐标准方式 if condition: sys.exit() # 默认退出码0(成功) # sys.exit(1) # 可指定非0退出码表示错误[^1] # 方法2:SystemExit异常 raise SystemExit # 效果同sys.exit() # 方法3:os._exit() - 强制立即退出(不推荐) import os os._exit(1) # 绕过清理机制,仅特殊场景使用 ``` #### 2. **命令行终止后台进程** ```bash # 查找进程ID ps -ef | grep python # Linux/Mac[^2] tasklist | findstr python # Windows # 终止进程 kill <pid> # Linux/Mac[^2] taskkill /PID <pid> /F # Windows ``` #### 3. **图形界面程序退出** ```python # PyGame示例(引用[1]的实现) import pygame, sys while True: for event in pygame.event.get(): if event.type == pygame.QUIT: # 点击窗口关闭按钮 pygame.quit() # 释放资源 sys.exit() # 退出程序[^1] ``` #### 4. **终端交互环境退出** ```bash >>> exit() # 方法1:内置函数 >>> quit() # 方法2:等价函数 >>> Ctrl+D # Linux/Mac快捷键(发送EOF) >>> Ctrl+Z # Windows快捷键(挂起进程)[^3] ``` ### 使用建议 1. **首选方案**:程序内部使用 `sys.exit()`,可携带退出状态码 2. **强制终止**:操作系统命令 `kill`/`taskkill` 用于失控进程 3. **资源清理**:图形程序需先释放资源(如 `pygame.quit()`)再退出[^1] 4. **退出码规范**: - `0`:成功退出 - `非0`:错误退出(自定义代码表示不同错误类型) ### 示例场景 ```python # 带错误处理的退出示例 try: critical_operation() except Exception as e: print(f"致命错误: {e}") sys.exit(1) # 非0退出码表示异常终止 finally: cleanup_resources() # 确保资源释放 ``` > **关键点**: > - 避免直接使用 `os._exit()` 除非需要绕过异常处理 > - 后台进程使用 `nohup` 启动时需用 `kill` 终止[^2] > - Windows 服务程序需实现 `ServiceControlHandler` 接收退出指令
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值