python调用外部程序的方法

import os
'''
#os.system()#这个函数执行起来打开DOS窗口操作系统的shell,敲入一串命令
#比如mspaint命令,我们可以手动执行这个命令。这个过程可以在Python程序中,用os.system函数进行自动化
os.system('mspaint')#调用的这个程序没有退出时,Python程序会一直停留在这个地方
#说个题外话CTRL+鼠标左键可以直接跳入该函数查看
print('after call')#上方那个程序退出后,下面的内容才会被打印出来
'''

'''
#如果在DoS窗口中该程序有命令行,那么使用OS函数也可以添加命令行用空格隔开
# 比如mspaint这个软件是截图软件,在DOS窗口中直接输入mspaint这个命令会直接打开画图工具,
# 输入mspaint e:\\1.png会使用画图工具打开这个图片,那么使用os函数也会有这个效果
os.system(r'mspaint D:\\1.png')
print('after call')
'''

'''#上面的例子是一个简单的例子,命令也很简单,但是有些程序的命令很复杂直接看例子,开源的一款软件FFmpeg
# 可以用来录制视频、转换视频、并且可以流媒体输出视音频流。非常实用。国内
# 很多多媒体工具都是使用它处理视频的。就像我们这里一样组装参数使用它
# 它的命令行非常复杂,这时候我们就可以用这个程序来吧命令行传入,然后需要用户决定的东西参数化,
# 这样用户就只需要简单的写入参数就可以了
# ffmpeg.exe -y -rtbufsize 100M -f gdigrab -framerate 10 -draw_mouse 1 -i desktop -c:v libx264 -r 20 -crf 35 -pix_fmt yuv420p -fs 100M "fffffffffffffffff"
#"fffffffffffffffff"这个是视频的文件名,可以加上路径'''

'''
#程序在退出的时候会有一个退出码,通常可以表示程序是否正确的实现了其功能,返回值为零,表示命令执行成功
#在使用Python调用这些程序时,通常需要这些退出码来决定是否进行后续操作,下面还是看代码
r = os.system('dir')
print(r)#此时r的打印结果是0,如果一个程序它的退出码为0那么就表示这个程序成功退出了
'''

'''
#os.system()是一个简单地调用其他程序的功能python中还有另外一个模块subprocess,提供了更为强大的功能
# 通常使用subprocess最常见的目的就是检查应用的输出,而os只能获取返回码,不能获取输出到屏幕的内容
# 如果想获取被调用的命令或工具输出到终端的信息并进行处理,可以使用subprocess库里的check_out put 函数
import subprocess
#shell=True 表示使用终端shell执行程序,windows下面就是cmd.exe
ret = subprocess.check_output('dir',shell=True,encoding='gbk')
print(ret)
#subprocess.check_output()需要等到被调用的程序退出,才能返回。
'''

'''
# 有时我们需要被调用程序还没有退出的时候,就获取其输出的信息
# 或者在被调用程序运行的过程中,输出一些信息给被调用程序
# 这个时候我们需要使用subprocess 库里面的Popen类
# 这个是这个类定义的参数如下
# #subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None,
# # close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None,
# # creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)
# 而需要我们特别注意的是args/shell/stdout/stderr/encoding这五个
# popen可以非阻塞式调用外部的程序,也就是说它不需要等被调用的程序结束,脚本代码可以继续往下执行
from subprocess import Popen
popen = Popen(
    args = r'mspaint D:\\1.png',
    shell = True
)
print('我不需要上面的代码结束我就可以执行')#这句话不需要关闭上面在运行的程序就能执行

#popen同样可以获取外部程序的输出信息
from subprocess import  PIPE
popen1 = Popen(
    args = 'dir F:',#args =可以省略,原因可以看看缺省参数,前面讲的有,参数传错的时候err的信息不会为 NONE
    stdout = PIPE,
    shell = True,
    encoding='gbk'
)
output,err = popen1.communicate()#
print(output,err)
# 注意stdout = PIPE 表示 我们下面需要将调用的程序的标准输出信息获取到管道文件中,
# PIPE是表示将输入信息流入到管道文件的意思。
# 如果我们要获取程序的输出信息,就要这样指定。
# 后面执行
# output, err = popen.communicate()
#popen.communicate()返回的就是 标准输出和标准错误  上面输出的文字信息
'''

你可能感兴趣的:(py)