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

作者:hellocsz 时间:2022-10-12 14:39:25 

对于如何结束一个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))

来源:https://blog.csdn.net/hellocsz/article/details/79940647

标签:Python,结束程序
0
投稿

猜你喜欢

  • mysql日志文件General_log和Binlog开启及详解

    2024-01-17 08:20:44
  • Python数据类型转换详解

    2021-03-04 04:11:13
  • 详解torch.Tensor的4种乘法

    2023-08-11 21:09:03
  • asp中记录集对象的getrows和getstring用法分析

    2012-11-30 20:09:49
  • 注意:php5.4删除了session_unregister函数

    2023-11-24 12:31:54
  • JS实现动画中的布局转换

    2023-10-14 15:58:04
  • python中使用.py配置文件的方法详解

    2022-02-13 19:57:22
  • C#使用ADO.Net部件来访问Access数据库的方法

    2024-01-27 01:45:42
  • Python Scrapy多页数据爬取实现过程解析

    2021-02-28 08:14:01
  • border边框在浏览器中的渲染方式

    2010-03-10 10:52:00
  • python基础之错误和异常处理

    2021-07-28 05:46:15
  • python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    2022-05-05 02:25:04
  • swfobject2.1居中问题

    2008-12-15 17:18:00
  • Python3.5装饰器典型案例分析

    2023-03-05 20:32:35
  • Django中间件拦截未登录url实例详解

    2022-05-15 05:30:21
  • python-json校验-jsonpath解析

    2023-11-20 11:40:01
  • python 获取剪切板内容的两种方法

    2021-09-26 03:22:34
  • Python调用系统底层API播放wav文件的方法

    2021-10-02 06:54:13
  • 关于element-ui中el-form自定义验证(调用后端接口)

    2024-04-27 15:57:00
  • 关于vue2使用element UI中Descriptions组件的遍历问题详解

    2024-05-09 15:15:42
  • asp之家 网络编程 m.aspxhome.com