额,我想表达的是使用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.
设计道德原因,爬虫代码不公开.