调用外部程序
python是粘合语言
现成的工具软件,它们都可以完成一些功能(wget,ffmpeg)ffmpeg 用于win上录制视屏
有时需要扩展以下,添加一点功能(free)free Linux查看内存占用率
有时需要把工具软件结合起来(free、gnuplot)
粘合各种外部程序和各种语言的库,实现功能
两种方法:
1、os.system
os库里面的system函数
等于打开操作移动的shell,敲入一串命令
比如 mspaint 命令(画图)
需要等待被调用的程序退出,才能返回
import os
os.system('mspaint') # win下调用画图程序
# os.system('mspaint d:\1.jpg') #用户图程序自动打开图片
print('after call')
ffmpeg
退出码(通过退出码判断是否正常运行(调用是否成功))
import os
ret = os.system('ls') # mac下列出当前目录所包含的文件
print('.................')
print(ret) # 打印退出码,==0 表示调用成功
print('---------------------')
ret = os.system('ls dd') # mac下列出当前目录所包含的文件
print('.................')
print(ret) # 打印退出码,!=0 表示调用失败
# 执行结果
异常.py
连接Linux.py
.................
0
---------------------
.................
256
ls: dd: No such file or directory
Linux的命令:ls ;echo $?
通常退出码为0,表示成功
2、subprocess
可以调用外部程序,且可以获得外部程序的输出内容
可以输入
subprocess.check_output 需要等待被调用的程序退出,才能返回
import subprocess
# shell=True表示使用终端shell执行程序,Windows下面就是cmd.exe
# 就是我们python程序调用cmd.exe再由cmd.ext执行 参数命令
ret = subprocess.check_output('dir',shell=True,encoding='gbk')
# 如果有中文,需要decode,因为是中文os,所以cmd.exe输出是gbk编码
# dir 目录 可以查看该目录下包含哪些文件
print(ret)
# 如果不指定enconding,返回的就是字节串
# print(ret.decode('gbk'))
subprocess库里面的Popen类,可以:
被调用程序运行时候,就获取其输出的信息
运行时,输入一些信息给被调用程序
非阻塞式调用
输入输出重定向
装饰器
函数里再定义函数(只在第一层函数内有效)
函数里再定义类(只在第一层函数内有效)
装饰器
定义类的静态方法时,就使用了装饰器。
@staticmethod
def jump()
print('3 meters high')
装饰器的特点是用一个@开头的字符串
在我们阅读别人的代码时,会经常碰到装饰器
装饰器通常用来装饰函数
装饰器主要用来给函数增加一点功能/改变一些功能
一般装饰器本身也是一个函数(callable)
我们可以想象成它包含了被装饰的函数