公司网站如何租用服务器,工商网站如何下载建设银行u盾证书,wordpress搬到谷歌服务器,个人网站模板响应式Python经常被用来开发自动化程序。自动化程序往往需要调用其他的程序。
例如#xff0c;我们可以代码中调用wget程序#xff0c;而不是自己开发下载的代码。
这就是我们经常做的#xff0c;在我们的Python程序中调佣其它程序#xff0c;帮我们实现功能。 Python中调用外部…
Python经常被用来开发自动化程序。自动化程序往往需要调用其他的程序。
例如我们可以代码中调用wget程序而不是自己开发下载的代码。
这就是我们经常做的在我们的Python程序中调佣其它程序帮我们实现功能。 Python中调用外部程序主要通过两个方法来实现一个是os库的system函数另外一个是subprocess函数。 os.system函数
下载wget的windows包。 在cmd中可以执行 Python程序代码如下
import oscmd rd:\tools\wget http://mirrors.sohu.com/nginx/nginx-1.13.9.zipos.system(cmd)print(下载完毕)
代码说明
有python程序os.system这个有点类似Shellwindows中是cmd命令窗口然后在shell里面再执行的cmd这段命令。命令里是wget程序。这个意思。 下载完成 然后我们把这段代码进行更改
让用户自己来指定版本
import osnginx_version input(请输入Nginx的指定版本)
cmd frd:\tools\wget http://mirrors.sohu.com/nginx/nginx-{nginx_version}.zipos.system(cmd)print(下载完毕)
代码说明
f说明字符串格式化方式。
r说明里面的\符号不进行转义。 这个程序运行的时候一直要等到下载完毕最后才打印出‘下载完毕’这句话来。
原来os.system函数调用外部程序的时候必须要等到被调用程序执行结束才会接着往下执行代码否则就会一直等待。 另外os.system函数没法获取被调用程序输出到终端窗口的内容。如果需要对被调用程序的输出信息进行处理的话可以使用subprocess模块。
例如要获得计算机的内存大小的输出信息。 os.subprocess模块
subprocess模块提供了更多的调用外部程序的功能。
首先我们可以获得外部程序输出到屏幕的内容。这在自动化的时候非常有用。可以用来判断外部程序执行结果是否成功或者获取我们要分析的数据。 可以使用subprocess里面的Popen类。 C:\Windows\system32fsutil volume diskfree c:
总可用字节数 : 68,709,957,632 ( 64.0 GB)
总字节数 : 214,748,360,704 (200.0 GB)
总配额可用字节数 : 68,709,957,632 ( 64.0 GB)
不可用池字节数 : 0 ( 0.0 KB)
配额不可用池字节数 : 0 ( 0.0 KB)
已用字节数 : 140,404,006,912 (130.8 GB)
总保留字节数 : 5,634,396,160 ( 5.2 GB)
卷存储保留字节数 : 5,591,650,304 ( 5.2 GB)
可用提交字节数 : 0 ( 0.0 KB)
池可用字节数 : 0 ( 0.0 KB) 人家有现成的程序我们只要把这个程序工具的结果信息拿过来得到结果然后进行处理。 from subprocess import PIPE, Popen# 返回的是 Popen 实例对象
proc Popen(fsutil volume diskfree c:,stdin None,stdout PIPE,stderr PIPE,shellTrue)# communicate 方法返回 输出到 标准输出 和 标准错误 的字节串内容
# 标准输出设备和 标准错误设备 当前都是本终端设备
outinfo, errinfo proc.communicate()# 注意返回的内容是bytes 不是 str 我的是中文windows所以用gbk解码
outinfo outinfo.decode(gbk)
errinfo errinfo.decode(gbk)
print (outinfo)
print (-------------)
print (errinfo)outputList outinfo.splitlines()# 剩余量
free int(outputList[0].split(:)[1].replace(,,).split(()[0].strip())# 总空间
total int(outputList[1].split(:)[1].replace(,,).split(()[0].strip())if (free/total 0.1):print(!! 剩余空间告急)
else:print(剩余空间足够)
代码说明
shellTrue通过shell执行fsutil命令。
如果我们要获取到程序输出到终端的内容我们需要指定stdoutPIPEPIPE是一个变量这个值是-1PIPE是一个管道。这个管道我们可以通过PIPE读取出来。
communicate 方法返回输出到标准输出和标准错误的字节串内容。
注意是字节串内容bytes那说明这个字节串内容需要解码因为是windows操作系统所以需要使用gbk来进行解码然后才能转到字符串内容。
相关文章: