博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口
阅读量:4709 次
发布时间:2019-06-10

本文共 1011 字,大约阅读时间需要 3 分钟。

额,我想表达的是使用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.

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

转载于:https://www.cnblogs.com/love-DanDan/p/10789121.html

你可能感兴趣的文章
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
配置NRPE的通讯
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
SSH加固
查看>>
python 二维字典
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>
UVA 116 Unidirectional TSP (白书dp)
查看>>
cnblog!i'm coming!
查看>>