狂自私

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口

额,我想表达的是使用os.system()打开另一个可执行文件,然后等待其结束,关闭cmd窗口

主要是我突发奇想想装逼;

如果只是用multiprocessing库的多进程,然后输出信息的话,根本没法看好吧,乱成一团.重定向就更不行了,我的目的就是要(zhuang)看(bi)嘛;

os.system()是打开一个新的窗口来运行可执行文件

用os.popen()是在当前的窗口执行命令(我从效果来看是这样的.)

我把子进程的主要执行代码封装成了一个模块,叫get_content.py.

py文件肯定要用python.exe来运行涩.模块只是一个子进程,父进程必须传参,不然要子进程干啥.

所以我最终传过去命令行字符串是: start /wait cmd.exe @cmd /k python get_content.py '+path+' '+book_name+' '+str(index)+' '+str(os.getpid());

后面的什么path,index都是参数,只不过每次都要变,就不写具体值了.

因为python要用cmd运行,所以前面加了cmd,但是不要start /wait的话就不能打开新窗口了.所以start /wait是装逼的关键, /wait参数是让父进程等待子进程结束.

然而很不幸,这条命令下去之后在不人为干预的情况下父进程永远等不到子进程结束的那天.

实际上这条命令下去之后创建了多个(4)子进程,形成了父→子→孙→孙这样一个进程链.

就这样:

 

为什么说是四个,首先start打开新窗口,在运行cmd,之后再有python,再有我封装的可执行文件,如果不关闭cmd,name当我的可执行文件执行完之后,python.exe,cmd.exe会一直运行.一直占用资源.

怎么结束呢,还是用os模块的函数,不过我这次用的popen();

#杀掉父进程,加-f强制结束

os.popen('taskkill.exe /pid '+str(os.getppid())+' -f');

#自杀

#os.popen('taskkill.exe /pid '+str(os.getpid()));

os.popen('exit.exe');

这样就ok.

设计道德原因,爬虫代码不公开.

posted on   狂自私  阅读(9615)  评论(0编辑  收藏  举报

编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
点击右上角即可分享
微信分享提示