调用外部程序

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)

我们可以想象成它包含了被装饰的函数