Python的几种主动结束程序方式


Posted in Python onNovember 22, 2019

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

参考:

Python 核心编程(第二版)

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

1. sys.exit()

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

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

import sys
sys.exit()
sys.exit(0)
sys.exit(1)

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

2. os._exit()

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

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

3. os.kill()

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

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

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

SIGINT      终止进程     中断进程

SIGTERM   终止进程     软件终止信号

SIGKILL    终止进程      杀死进程

SIGALRM   闹钟信号

例:

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

Python的几种主动结束程序方式

然后执行os.kill操作:

Python的几种主动结束程序方式

执行完之后可以发现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掉,于是别写了下面的这个脚本

#coding=utf-8 
import sys,os 
def kill_crawler(id): 
  cmd = 'ps -ef | grep python' 
  f = os.popen(cmd) 
  txt = f.readlines() 
  for line in txt: 
    colum = line.split() 
    pid = colum[1] 
  name = colum[-1] 
  if name.startswith('run_task_'): 
    task_id = name[9:-3] 
    if task_id == id or id =='0': 
    cmd = "kill -9 %d" % int(pid) 
    rc = os.system(cmd) 
    if rc == 0 :  
          print "stop \"%s\" success!!" % name 
        else: 
          print "stop \"%s\" failed!!" % name 
 
if __name__ =='__main__': 
   
  if not len(sys.argv)==2: 
  print u'输入要结束的任务编号,0代表停止所有' 
    sys.exit() 
  id = sys.argv[1] 
  kill_crawler(id)

4. Windows下Kill进程

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

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

taskkill   /pid   程序的PID号码

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
Python解析nginx日志文件
May 11 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
Python自动生产表情包
Mar 17 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
Python pyecharts绘制条形图详解
Apr 02 Python
Python如何让字典保持有序排列
Apr 29 Python
python实现超市商品销售管理系统
Nov 22 #Python
python实现二分类的卡方分箱示例
Nov 22 #Python
python的等深分箱实例
Nov 22 #Python
基于python实现学生信息管理系统
Nov 22 #Python
基于python cut和qcut的用法及区别详解
Nov 22 #Python
python创建学生成绩管理系统
Nov 22 #Python
Python计算不规则图形面积算法实现解析
Nov 22 #Python
You might like
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
浅析php header 跳转
2013/06/17 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
Firefox div高度自适应
2009/04/28 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
js验证账户名是否重复
2020/05/26 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python匿名函数用法实例分析
2019/08/03 Python
python中的yield from语法快速学习
2020/11/06 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
社区安置帮教工作总结2015
2015/05/20 职场文书
仓库管理制度范本
2015/08/04 职场文书
公司行政管理制度范本
2015/08/05 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
贷款担保书范本
2015/09/22 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书