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按行读取文件的简单实现方法
Jun 22 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
Python 处理图片像素点的实例
Jan 08 Python
Python读取指定日期邮件的实例
Feb 01 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
pytorch之添加BN的实现
Jan 06 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
详解Python中pyautogui库的最全使用方法
Apr 01 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
基于jquery实现智能表单验证操作
2016/05/09 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
vue实现信息管理系统
2020/05/30 Javascript
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Anaconda入门使用总结
2018/04/05 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
英国大码女性时装零售商:Evans
2018/08/29 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
深圳茁壮笔试题
2015/05/28 面试题
2014年端午节活动方案
2014/03/11 职场文书
中学清明节活动总结
2014/07/04 职场文书