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();
随机推荐
- 压力测试:系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高, ...
- 嵌入式GCC笔记
GNU C Complier 查看 gcc 版本 :gcc -v 文件后缀名 .c的后缀 为C语言的文件源码 gcc -o output gcc -o 输出文件名字 输入文件名 gcc -v -o ...
- Btrace 拦截时机
Kind.ENTRY 入口,默认值 Kind.RETURN: 返回 Kind.THROW: 异常 Kind.Line: 行 一.返回时拦截 package com.example.monitor_t ...
- python随机数学习笔记
#coding:utf-8 import random # random.randint(1,10)产生1,10的随机整数 for i in range(1,5): ranint = random.r ...
- php如何和linux进行通讯
FastCGI原理 FastCGI是一个运用于Http Server和动态脚本语言间通信的接口,多数流行的Http Server都支持FastCGI,包括Apache.Nginx和lighttpd等. ...
- note 8 字符串
字符串String 一个字符的序列 使用成对的单引号或双引号括起来 或者三引号""" 和 ''' 表示块注释 字符串运算 长度 len()函数 first_name = ...
- vscode之常用快捷键
原文章地址: vscode: Visual Studio Code 常用快捷键 官方快捷键说明:Key Bindings for Visual Studio Code 主命令框 F1 或 Ctrl+S ...
- realm清空所有数据库的数据
/* *清空数据库 */ public int clearDatabase() { Realm realm = Realm.getDefaultInstance(); try { realm.begi ...
- 架构师技能图谱 V1.2
系统架构能力 基本理论 扩展性设计 可用性设计 可靠性设计 一致性设计 负载均衡设计 过载保护设计 灾难恢复和备份 协议设计 二进制协议 文本协议 接入层架构设计 DNS 轮询 动静态分离 静态化 反 ...
- hive 一次更新多个分区的数据
类似订单数据之类的表,因为有状态要更新,比如订单状态,物流状态之类的, 这样就需要同步很久之前的数据,目前我的订单表是更新前面100天的数据. hive中操作是先删除前面100个分区的数据,然后重新动 ...