说明:

python 将html保存为PDF之一个学习笔记

今天转存HTML为pdf的时候,然后我使用os.system时候出现问题,后来网上搜索python有三种执行命令,结果我使用os.popen()可以了,后来再使用os.system(),又可以了。后来我参考的哪个博主写的将廖雪峰大牛的博客转存成pdf的代码整合,基本上不能用了,不过也感谢博主,让我知道了大概使用,又多搜索了几篇,有的模块功能方法有些更改了,当然经过一天的整理弄懂了,还用自己的方法代替之前博主的哪个方法,通过整理还弄懂了这个三个执行命令的区别,下面进入正题。

三个python执行系统命令的方法:

1、os.system()

这个执行命令会执行完成一个才会执行下一个。

直接在里面整理命令就行:
比如我的关于pdf整理的这个:

1
os.system(r'wkhtmltopdf {} ./pdf3/{}.pdf'.format(article_url, num))

2、os.popen()

1
os.popen(r'wkhtmltopdf {} ./pdf2/{}.pdf'.format(article_url, num))

这个不会等待当前这个完成接着执行,因为我测试执行了大概129个pdf,相当于直接执行了129个命令,我的电脑瞬间卡死了,我也懵了,我看了下cpu直接满了,内存也是持续上升(好奇的同学自己测试哈)。
后来等了好十来分钟吧,程序结束好久了,pdf还在下载,我就知道了这个方法的使用了,原来不等待。

在这里插入图片描述
在这里插入图片描述

3、subprocess.Popen()

1
subprocess.Popen(r'wkhtmltopdf {} ./pdf/{}.pdf'.format(article_url, num))

带着好奇心的我,又来测试这个是否等待结果还是不等待。
这个和os.popen() 基本上是一样的。

4、如何让subprocess.Popen()和os.popen()等待

三个都测试完了,我的好奇心开始转向如何等待才会完成,然后测试代码将命令赋值给要给变量,获取他的熟悉,如果不弹出属性,我们也可以使用dir(subprocess_one)打印出他的属性,肯定能找到等带的方法,最终找到subprocess.Popen()的等待方法是wait():

在这里插入图片描述
在这里插入图片描述

同理,使用方法测得os.popen()的等待方法是close(),其中这个我是使用打印dir()的,因为第一次弹出close,我以为这个是直接关闭进行下一个,后来测试才发现就是等待结束,然后进行下一个。

在这里插入图片描述
在这里插入图片描述

5、总结:

  1. os.system():一次执行一个,不能多个执行,如需要,可以借助多线程,一次执行五个等待,达到执行多个的效果。
  2. os.popen() :不等待直接执行下一个,如果需要一次执行5个,可以设置一个列表,把变量加进去,然后列表满5个进行循环等待全部结束,再往下一次执行5个。等待方法是close()。
  3. subprocess.Popen():不等待直接执行下一个,如果需要一次执行5个,可以设置一个列表,把变量加进去,然后列表满5个进行循环等待全部结束,再往下一次执行5个。等待方法是wait()。