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
然后执行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掉,于是别写了下面的这个脚本
#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
猜你喜欢
- 分页浏览功能是常见的Web应用功能,对于MySQL数据库来说可以很轻松的使用limit语句实现分页,而对于SQL Server数据库来说,常
- 简介TensorFlow 是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先
- 本文实例讲述了PHP实现的简单排列组合算法应用。分享给大家供大家参考,具体如下:一、问题:给你一个40斤的西瓜,给3个人分,有多少种分法?二
- 模块:包含定义函数和变量的python文件,可以被别的程序引入。os模块是操作系统接口模块,提供了一些方便使用操作系统相关功能函数,这里介绍
- 本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习python。一、Python的异常处理因为想到自己不断尝试写
- 用户体验已经是一个老生常谈的话题了。我非常赞同某位达人所说的,用户体验设计应该贯穿于产品从萌芽到出生的整个过程,产品原型、视觉设计、前端开发
- 我从11岁开始编程,并且一直都很喜欢技术和编程。这些是我一直以来获得的经验教训。作为一个程序员,你可能需要这样的忠告。我更希望每个人在获取这
- 现在公布方法:替换editor.js 函数 // Toolbar button onmouseup
- 啥也不说了,还是看代码吧! [root@yyjk DATABASE]# cat DBI.py# -*- coding: utf-8 -*-
- 本文实例讲述了Python装饰器decorator用法。分享给大家供大家参考。具体分析如下:1. 闭包(closure)闭包是Python所
- 如何验证信用卡是否可用,合法? 核实信用卡的真伪是一件麻烦的事儿,看看下面的代码,也许会给你帮上忙:<Script 
- 一、操作步骤导入:import flask,json实例化:api = flask.Flask(name)定义接口访问路径及访问方式:@ap
- SQL Server Extended Events(下面简称XEvent)是SQL Server 2008里新加的事件处理系统,用来取代S
- xmlhttp,IE不支持overrideMimeType()方法,即使是IE7。 // Mozilla/Safari/
- 判断字符串长度函数:<SCRIPT LANGUAGE="JavaScript"><!--fu
- 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到,并且会自动添加一个windows 任务计
- 好不容易有些空余时间,便拿来写自己的CSS选择器引擎了,这个CSS选择器引擎的目标只有三个:速度要快代码要精简要支持CSS3的选择器。希望通
- 即使MyISAM表格式非常可靠(SQL语句对表做的所有改变在语句返回之前被写下),如果下列任何事件发生,你依然可以获得损坏的表:&m
- 前言上一篇暴力破解文章:一个简单的Python暴力破解网站登录密码脚本测试靶机为Pikachu漏洞练习平台暴力破解模块下的 &ldq
- 在进行浮动布局时,大多数人都深知,在必要的地方进行浮动清理:<div style="clear:both;">