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.
设计道德原因,爬虫代码不公开.
python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口的更多相关文章
- delphi -----(去掉窗口最大化,最小化、关闭),主窗口,和子窗口之间的设置
一.去掉窗口最大化,最小化.关闭 borderIcons:biSystemMenu:false borderStyle:bsSizeable 二.主子窗口 主main: //调用子窗体procedur ...
- Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- python基础===多进程
进程线程的区别在进程,线程,协程的区别 linux或者unix有fork()函数,但是不支持win系统. multiprocessing multiprocessing模块是跨平台版本的多进程模块.支 ...
- 进程,线程,以及Python的多进程实例
什么是进程,什么是线程? 进程与线程是包含关系,进程包含了线程. 进程是系统资源分配的最小单元,线程是系统任务执行的最小单元. 打个比方,打开word,word这个程序是一个进程,里面的拼写检查,字数 ...
- Python多线程多进程那些事儿看这篇就够了~~
自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块 ...
- windows开机自动执行bat脚本启动cmd命令窗口并执行命令,最后自动关闭cmd命令窗
先说bat脚本吧,随便在桌面建一个文本文档,在里面写脚本,内容是,先启动cmd命令窗,并执行一个命令,最后自动关闭cmd窗,如下: ---------------------------------- ...
- Python的多进程和多线程
进程和线程 进程是系统进行资源分配的最小单位,线程是系统进行调度执行的最小单位: 一个应用程序至少包含一个进程,一个进程至少包含一个线程: 每个进程在执行过程中拥有独立的内存空间,而一个进程中的线程之 ...
- 【python】多进程锁multiprocess.Lock
[python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报 分类: Python(38) 同步的方法基本与多线程相同. ...
- lhgdialog在打开的窗口里点击按钮关闭当前窗口
lhgdialog在打开的窗口里点击按钮关闭当前窗口 var api = frameElement.api, W = api.opener; api.close();
随机推荐
- java8_api_jni
java本地接口 jni java native interface,用于java代码和本地编程语言(c,c++等)交互的编程接口 java不太会跟底层硬件打交道,而c,c++跟底层 ...
- 使用User Primary Email作为GUID的问题
最近发现有人使用CRM的user primary email作为GUID, 并且做了plugin来控制user primary email. 这样做法是非常有问题而且会影响同名的再次注册的用户. 假如 ...
- Docker系列(一)CentOS 6.5 离线安装、不升级内核
本特安装教程特点 1.由于是离线下载,需要提前下载好需要的依赖包 2.使用的版本为Centos6.5 3.不升级内核 4.提供异常解决方案. 安装过程 一.下载依赖包(使用能联网的节点) 依赖包可以自 ...
- [JAVA]字节流拷贝文件
import java.io.*; public class CopyFile { public static void main(String[] args) { //1.创建源 File in = ...
- VS快捷键大全(总结了一些记忆的口诀)(转载)
相信.Net开发人员都想能够熟记各种VS快捷键以提高平时开发的效率,但苦于记忆能力太差而快捷键又特别多,特别烦,所以作罢! 下面我将简单介绍一下我记忆VS快捷键的一些方法,希望对大家有所帮助. 1.窗 ...
- windows 端口转发
1.添加端口转发 netsh interface portproxy add v4tov4 listenport=5000 listenaddress=10.30.3.148 connectport= ...
- elasticsearch -- Logstash实现mysql同步数据到elasticsearch
配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ...
- IOS屏幕旋转思路和实践
这段时间同事在做一个直播项目,项目有个需求:一个界面需要手动设置屏幕的方向,设置好之后方向不能变化.完成这个需求花了特别大的精力,归因是网上关于屏幕旋转的知识比较凌乱,解决问题花费不少时间,最后决定把 ...
- Ubuntu 16.04 安装 Python3.6
直接在官网下载 Python3.6.3 的源代码,解压缩,按照 README.rst 内说明步骤编译安装即可,这样 pip3.6 也会自动安装. 注意第一步配置时最好指定安装目录, $ ./confi ...
- redis4.0.13主从、哨兵、集群3种模式的 Server端搭建、启动、验证
本文使用的是redis-4.0.13.tar.gz版本. 两个centos7系统虚拟机:192.168.10.140.192.168.10.150 redis各版本下载地址:http://downlo ...