【实测】windows下进程的创建和终止-python3

简介: 【实测】windows下进程的创建和终止-python3

因为最近在写的测试平台需要在windows上运行

   所以就来探讨了一下windows的dos命令。


   友情提示(本公众号实测系列请保存成书签,都是原创的宝贵的踩坑经验。比网上那些各种复制粘贴,只言片语,断文取义,不知原理的所谓教程要强得多。)


   首先,在macOs或者linux当中,进程的创建和终止用python3来实现很简单:

mac/linux :


p = subprocess.Popen('python3 test.py‘ , shell=True)


之所以用Popen是因为这是非阻塞的。


仅仅如此简单,就创建了进程。

然后再来看win的创建方法。

win:


p = subprocess.Popen('python3 test.py', shell=True)

   

怎么样,是不是一模一样。是不是都很简单?好,接下来就是分歧了。


当我们创建完以后,若想杀死这个进程。一般会使用进程的pid来杀死该进程。


而获取pid的方式,mac/linux 和 win就完全不同了。


mac/linux:


p = p.pid

很简单,直接拿p的pid就是了。

不过这个方法在win中行不通,因为种种原因,获取到的pid并不是子进程的pid。所以win的方法如下:

win:


res = subprocess.check_output('wmic process where caption="python.exe" get processid,commandline |findstr "%s"'%“关键字”, shell=True)
pid = re.findall(r'(\d+)', str(res))[-1]


如上的命令,首先你要确定你的进程命令主体,在我的举例当中,用的进程是一个python命令,所以要挟“python.exe”


但是为了确保能获取到正确的那个python.exe(因为会有很多)


所以你在一开始的时候,就需要给这个命令后面加上一个关键标识字符串(关键字)

也就是一开始新建进程的时候就应该写成:


p = subprocess.Popen('python3 test.py "关键字"', shell=True)

然后再通过正则和列表提取出真正的pid。


最后来看看,我们拿到了pid后要怎么杀死该进程:

mac/linux:

import os,signal
os.kill(int(pid),signal.SIGKILL)


很简单吧~


再看看win的:


subprocess.call('taskkill /PID %s /F'%pid,shell=True)



好了,到这就说完了。


虽然大家可能在网上搜到不少其他各种各样的方法,但是最好还是实际在终端或cmd中执行一下,亲眼看看它们的输出。

不要直接粘贴复制~

相关文章
|
4月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
425 1
|
5月前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
78 3
|
2月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
43 1
|
3月前
|
调度 Python
python3多进程实战(python3经典编程案例)
该文章提供了Python3中使用多进程的实战案例,展示了如何通过Python的标准库`multiprocessing`来创建和管理进程,以实现并发任务的执行。
111 0
|
4月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
4月前
|
Windows
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
3月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
61 0
|
4月前
|
Python Windows
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
|
4月前
|
Python Windows 内存技术
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
|
4月前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
下一篇
DataWorks