Python Appium Selenium 查杀进程的实用方法

一、前置说明

在自动化过程中,经常需要在命令行中执行一些操作,比如启动应用、查杀应用等,因此可以封装成一个CommandExecutor来专门处理这些事情。

二、操作步骤

# cmd_util.pyimport logging
import os
import platform
import shutil
import subprocessimport psutillogger = logging.getLogger(__name__)class CommandExecutor:@staticmethoddef execute_command(command):"""subprocess.run() 方法用于执行命令并等待其完成,然后返回一个 CompletedProcess 对象,该对象包含执行结果的属性。它适用于需要等待命令完成并获取结果的情况。"""try:result = subprocess.run(command, shell=True, capture_output=True, text=True)if result.returncode == 0:return result.stdout.strip()else:return result.stderr.strip()except Exception as e:return str(e)@classmethoddef kill_processes_with_name(cls, name):"""查杀窗口名称包含 name 的所有进程,支持模拟匹配"""try:if platform.system() == 'Windows':# Windows系统使用tasklist和findstr命令来获取包含特定字符串的窗口进程列表command = f'tasklist /V /FO CSV | findstr /C:"{name}"'output = cls.execute_command(command)if output:# 遍历输出的进程列表for line in output.splitlines():# 解析进程信息process_info = line.split(",")process_name = process_info[0].strip('"')process_id = process_info[1].strip('"')# 先尝试关父进程,解决:关掉uiautomatorview或appium server 之后, 会留下一个无用的cmd的窗口try:# 获取父进程parent_process = psutil.Process(int(process_id)).parent()# 终止父进程(CMD窗口)kill_parent_command = f"taskkill /F /T /PID {parent_process.pid}"cls.execute_command(kill_parent_command)except:pass# 如果没有父进程,则直接关闭子进程;如果父进程已关闭,子进程会消失,也try catch 一下try:# 终止进程kill_command = f"taskkill /F /T /PID {process_id}"cls.execute_command(kill_command)# 记录日志logger.info(f"Stopped process '{process_name}' with ID '{process_id}'")except:passelse:logger.info(f"No processes found with window name containing '{name}'")else:# 其他操作系统使用wmctrl命令获取包含特定字符串的窗口列表command = f"wmctrl -l | grep {name}"window_list = cls.execute_command(command)if window_list:# 遍历输出的窗口列表for line in window_list.splitlines():# 解析窗口信息window_info = line.split()window_id = window_info[0]# 关闭窗口os.system(f"wmctrl -ic {window_id}")# 记录日志logger.info(f"Stopped processes with window name containing '{name}'")else:logger.info(f"No processes found with window name containing '{name}'")except Exception as e:logger.warning(f"Error: {str(e)}")cmd_executor = CommandExecutor()
cmd = cmd_executor

三、Demo验证

以关闭多开的两个夜神模拟器,来测试代码,顺利关闭:

if __name__ == '__main__':import logginglogging.basicConfig(level=logging.DEBUG)print(cmd.kill_processes_with_name('夜神'))

欢迎技术交流:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

返回列表中满足指定条件的连续元素:只返回第一个不符合条件元素之前的各元素itertools.takewhile()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 返回列表中满足指定条件的连续元素: 只返回第一个不符合条件元素之前的各元素 itertools.takewhile() [太阳]选择题 请问以下代码输出的结果是? import itertools a …

富时中国A50指数查询方法详解

富时中国A50指数,是指衡量中国A股市场50家具有代表性的上市公司股票表现的指数。对于投资者来说,了解和查询A50指数的走势对于制定投资策略至关重要。那么,如何轻松地查询富时中国A50指数呢? 1. 百度搜索 百度搜索引擎是最简便的…

TCP通信

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点…

手机升级到iOS15.8后无法在xcode(14.2)上真机调试

之前手机是iOS14.2的系统,在xcode上进行真机测试运行良好,因为想要使用Xcode的Instruments功能,今天将系统更新到了iOS15.8 ,结果崩了 说是Xcode和手机系统不兼容不能进行真机测试。在网上查了好些方法,靠谱的就是下载相关版本的…

spark sql基于RBO的优化

前言 这里只对RBO优化进行简单的讲解。讲解RBO之前必须对spark sql的执行计划做一个简单的介绍。 这个里讲解的不是很清楚,需要结合具体的执行计划来进行查看 1、执行计划 在spark sql的执行计划中,执行计划分为两大类,即逻辑执行计划、物…

一文详解Java单元测试Junit

文章目录 概述、Junit框架快速入门单元测试概述main方法测试的问题junit单元测试框架优点:使用步骤: 使用案例包结构 Junit框架的常见注解测试 概述、Junit框架快速入门 单元测试概述 就是针对最小的功能单元(方法),…

转转闲鱼链接后台搭建教程+完整版源码

最新仿二手闲置链接源码 后台一键生成链接,后台管理教程:解压源码,修改数据库config/Congig 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3 后台一键生成链接,后台管理教…

YOLOv8优化策略:Backbone改进 | UniRepLKNet,通用感知大内核卷积网络,RepLK改进版本 | 2023.11

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科…

Matlab使用基础

基本命令 clear all %清除Workspace中的所有变量 clc %清除Command Window中的所有命令 %和%%是注释 whos%显示当前内存中的变量信息基础函数 abs()%取绝对值 char(65)%将ASCII码数值变成字符 num2str(65)%将里面的内容变成字符串 length()%字符串长度,不把/0的长…

dockers安装rabbitmq

RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQhttps://www.rabbitmq.com/ Downloading and Installing RabbitMQ — RabbitMQ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management 之后参照:dock…

OpenCV-Python:随机数与随机颜色

目录 Python中随机数 OpenCV-Python随机数 随机颜色的生成 随机噪声生成 代码练习与测试 知识笔记 Python中随机数 在Python中,我们可以使用random模块来生成随机数。random模块提供了一系列的函数来生成不同类型的随机数。以下是一些常用的随机数生成函数&…

解决git clone报错: Failed to connect to github.com port 443 after 21068 ms: Couldn’t connect to server

解决git clone报错: Failed to connect to github.com port 443 after 21068 ms: Couldn’t connect to server 1. 问题 不能git clone来自Github上的仓库,报端口443错误。 2.解决方案 主要是由于Git端口与系统代理不一致 默认的端口号:1…