windows subprocess 终止进程

Python 2 subprocess.Popen Windows终止进程

import subprocess
# Launch process
cmd_list = ["notepad.exe"]
process = subprocess.Popen(cmd_list,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
# Terminate
Process.terminate() or Process.kill()

你会发现 Process 停止了,但记事本没有被成功的 kill 掉,因为shell=True 的关系。

解决方案1:psutil

import psutil
import subprocess
from threading import Timer
# You need to pip install psutil package
def kill(proc_pid):parent_proc = psutil.Process(proc_pid)for child_proc in parent_proc.children(recursive=True):child_proc.kill()parent_proc.kill()
# Launch process
cmd_list = ["notepad.exe"]
proc_obj = subprocess.Popen(cmd_list,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
# set process 300 sec timeout
proc_timeout = 300
proc_timer = Timer(proc_timeout, kill, [proc_obj.pid])
try:proc_timer.start()  # start timerrt_code = proc_exec.wait() # python 2 not supported proc_exec.wait(timeout=300)
finally:proc_timer.cancel()

解决方法2:Windows command

import psutil
import subprocess
from threading import Timer
# You need to pip install psutil package
def kill(proc_pid):# kill process with subprocesskill_proc = subprocess.Popen("TASKKILL /F /PID {pid} /T".format(pid=proc_pid),stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# Launch process
cmd_list = ["notepad.exe"]
proc_obj = subprocess.Popen(cmd_list,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
# set process 300 sec timeout
proc_timeout = 300
proc_timer = Timer(proc_timeout, kill, [proc_obj.pid])
try:# start timerproc_timer.start()# python 2 not supported proc_exec.wait(timeout=300)rt_code = proc_exec.wait()
finally:proc_timer.cancel()

解决问题

参考文章

附录:

你可以使用此句柄终止使用ctypes或pywin32扩展名的子进程。

# Create a process that won't end on its own
import subprocess
process = subprocess.Popen(['python.exe', '-c', 'while 1: pass'])# Kill the process using pywin32
import win32api
win32api.TerminateProcess(int(process._handle), -1)# Kill the process using ctypes
import ctypes
ctypes.windll.kernel32.TerminateProcess(int(process._handle), -1)# Kill the proces using pywin32 and pid
import win32api
PROCESS_TERMINATE = 1
handle = win32api.OpenProcess(PROCESS_TERMINATE, False, process.pid)
win32api.TerminateProcess(handle, -1)
win32api.CloseHandle(handle)# Kill the proces using ctypes and pid
import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, process.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)

您可以使用pywin32或ctypes来调用Windows TerminateProcess API。
只需选择一个-两者都不需要。
如果您不喜欢访问Popen返回的对象的未记录的_handle成员,则可以使用已记录的pid成员和Windows OpenProcess API来获得相同的结果。

参考原文地址

Python 在Windows上终止子过程(subprocess)相关推荐

  1. Python 在windows上跑图色脚本?简单又好玩,自己编写一个自动化脚本

    Python 在windows上跑图色脚本?简单又好玩,自己编写一个自动化脚本 大家好 我又来开新坑了,如图这次准备用python弄个简单脚本(根据图色判断进行键鼠操作) 1.老规矩 先安排运行环境 ...

  2. python在windows上安装_在Windows上安装Python | 严佳冬

    1.首先根据自己windows系统的版本,确认是32位还是64位,从Python的官方网站下载Python 3.4对应的程序版本.(网络慢的可以移步国内网盘直接下载:http://pan.baidu. ...

  3. Python常见问题(6):Python在Windows上的问题 Python on Windows FAQ

    Contents Python on Windows FAQ How do I run a Python program under Windows? How do I make Python scr ...

  4. python在windows上的扩展名_python – 如何克服 – 在windows上使用文件名或扩展名失败的pip install ansible...

    好吧,这似乎是一个已知的错误: In Ansible 2.4.0,the module copy use symbolic links in the tests suite: 07001 circle ...

  5. 测试Python是否安装成功—python在Windows上的配置测试

    测试Python是否安装成功 Pyhon 安装成功后,需要检测 Python 是否真的安装成功.在 Windows系统中检测 Python是否真的安装成功,可以单击 Windows 系统的" ...

  6. CMD是什么?(命令行提示符)如何使用python在windows上操作CMD?(python执行命令行)os.syste[m](执行的命令)、os.popen(执行的命令)

    文章目录 cmd是什么 python操作cmd 方法1: 方法2: 20200309 cmd是什么 cmd是command的缩写.即命令提示行(CMD),是在OS / 2 , Win为基础的操作系统( ...

  7. Python 在Windows上的注册表

    为什么要设置注册表项 目的是为了其他工具找到注册的Python信息,可执行文件位置,库目录等信息. 标准 PEP-0514: https://www.python.org/dev/peps/pep-0 ...

  8. 各个版本的python在windows上如何安装pywin32

    因为安装python3.4后的版本往往在安装时都可以直接勾选自带pip(pack install for python) 所以我们安装好python后就可以直接打开cmd 直接pip install ...

  9. Python 获取windows上用户的全名

    在获取系统登录用户账号有很多方法,这些都只是获取了登录的账号名,而是Windows中开始菜单右上方显示的全名.它可能仅在活动目录设置中显示为全名. import os import win32api ...

最新文章

  1. VM pow 函数 :undefined reference to `pow'
  2. Linux中快捷键的使用,who命令,rm命令,ps命令,cd命令,kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim部分配置,相关命令
  3. 用CSS实现的模式窗口效果,弹出固定大小的窗口
  4. JavaScript 经典实例日常收集整理(常用经典)
  5. Rose与PowerDesigner:两款建模工具对比分析比较
  6. 【系统架构】如何解决热点数据更新问题
  7. python调用命令行获取pid_命令行命令/命令运行时的pid及获取
  8. 【kafka】kafka 如何查看 内部 磁盘 网络 是否繁忙
  9. 把执行结果转成json对象报错_给Hangfire的webjob增加callback和动态判断返回结果功能设计...
  10. 线性判别分析(Linear Dicriminant Analysis)参数推导记录备忘
  11. SpringBoot | 第十二章:RabbitMQ的集成和使用
  12. Linux的使用_尚硅谷视频学习笔记
  13. 计算机组成原理中EMAR是什么,计算机组成原理(罗克露)第3章cpu.ppt
  14. html5好看的颜色代码,css好看的颜色配色.html
  15. 英文PDF免费翻译成中文小方法!!!
  16. arduino 源码分层浅析
  17. Feign传输MultipartFile 报错 Error converting request body
  18. 2020-MyBatis面试题
  19. 华为3D建模服务(3D Modeling Kit),轻松构建高质量3D模型
  20. python爬取豆瓣读书并进行图形化分析

热门文章

  1. 导数卷积 牛客 NTT
  2. 一个阿里小二“改写”了《阿里巴巴与四十大盗》 | 悦读
  3. 科大讯飞AIUI唤醒报错25102
  4. 讯飞aiui的webapi+python使用记录
  5. 自定义ListView实现任意View跑马灯效果
  6. 光驱动器类有哪些最新发表的毕业论文呢?
  7. 泰坦尼克号幸存者的预测
  8. 以太坊(9)go-ethereum + mist 开发环境搭建 --mac
  9. CSDN博客调整图片大小
  10. 硬件设计--DC/DC电源芯片详解