笔记||Python3进阶之调用外部程序

像wget可以下载文件
ffmpeg可以切割、合并、转换、录制视频
free命令可以查看linux内存使用信息

python提供了库来调用外部程序、命令?
最常见的两种方法:
       ①os.system os库里面的system参数
       ②subprocess subprocess库 里面的对和函数

如:

       import os
       os.system('notepad')
       print('记事本已关闭')
注意:调用外部程序没有退出时,python程序会一直停在那里


对于有参数的命令,os.system()参数 直接把参数放在字符串中一起传入即可

向记事本传递参数,打开python.txt文件?

如:
       import os
       os.sys('notepad c:\python.txt')

=====================================================

python实现录屏功能?

import os

# 输出视频文件
import time

outputfile = 'C:\shipin' + time.strftime('%Y%m%d_%H%M%S', time.localtime()) + '.mp4'

# 工具目录
ffmpeg = r'C:\FFmpeg\安装包\ffmpeg-4.1-win64-static\bin\ffmpeg.exe'

settings = [
'-y -rtbufsize 100M -f gdigrab -framerate 10', # 帧率等
'-offset_x 1000 -offset_y 0 -video_size 640x480', # 录制指定屏幕区域
'-draw_mouse 1 -i desktop -c:v libx264', # 视频编码格式
'-r 20 -preset medium -tune zerolatency -crf 35', # 视频压缩参数
'-pix_fmt yuv420p -fs 100M -movflags +faststart "%s"' % outputfile # 大小限制 等
]

# 将参数组合起来
recordingCmdLine = ' '.join([ffmpeg]+settings)

# 查看命令内容
print(recordingCmdLine)

# 执行命令录制视频
os.system(recordingCmdLine)

======================================================================================
# 返回值
# 不管windows还是linux,如果一个程序它的退出码为0就是表示成功的话
# 如果我们只需要判断调用是否成功,也就是是否为0

import os
import subprocess


# ret = os.system('ls')
# if ret == 0:
# print(ret)


# os.system提供了简单的调用其他程序的功能
# 而python里面有另一个模块subprocess,提供了更为强大的功能
# 使用subprocess最常见的目的就是检查应用的输出


# 因为os.system只能获得返回码,输出到屏幕的内容并不能获取
# 如果想获取被调用的命令或工具输出到终端的信息,并进行处理,可以使用subprocess库里面的check_output函数
# 这个方法需要等到被动月供程序退出,才能返回
# shell=True 表示使用终端shell执行程序;参数encoding:指定哪种解码方式,
# 不填,是缺省值None,需要我们自己去解码
# ret = subprocess.check_output('dir', shell=True, encoding='gbk')
# print(ret)
# print(ret.decode('gbk'))# 如果我们需要被调用程序还没退出时,就获取其输出的信息;# 或者在被调用程序运行的过程中,输入一些信息给被调用程序

# 需要使用subprocess库里面的Popen类
# Popen可以非阻塞式调用外部程序,也就是说,无需等待被调用程序结束。脚本的代码可以继续往下执行
from subprocess import PIPE,Popen
# popen = Popen(args='notepad c:\python.txt', shell=True)
# print('done')

# Popen同样可以获取外部程序的输出
# stdout=PIPE 表示将被调用的程序的标准输出信息获取到管道文件中
# 要获取程序的输出信息,就要这样指定。
popen = Popen('dir c:',
                          stdout=PIPE,
                          shell=True,
                          encoding='gbk')
output, err = popen.communicate()
print(output)
print('----------------------------------------------')
print(err)

posted @ 2019-12-26 09:21  呸呸裴  阅读(626)  评论(0编辑  收藏  举报