python调用外部程序

一、两种方式

  • os.system
  • subprocess

1、os.system

os库里面的system函数,等于打开了操作系统shell,敲入一串命令

打开外部程序
示例打开画图工具:

import os
os.system("mspaint")
print("after call")

运行代码,会发现最后一句输出打印出来,是因为
os.system有一个特点:外部程序没有结束,这个调用就会一直等着,这种被称为阻塞式调用。
关闭画图,后面代码就会继续运行。

组装参数
工具软件命令行支持参数,组装出相应的参数,用画图打开一个图片

import os
os.system("mspaint e://tupian.jpg" )
print("after call")

返回值
Python在调用这些程序时,退出码作为返回值返回,一般情况0是正常退出,非0是异常退出
(1)Windows
如果是cmd.exe,返回值就是进程的退出码
(2)Linux
会返回一个16位的数字,低位字节表示结束进程的信号数值;
如果低位字节值为0,高位字节表示退出码。

示例代码:Windows可以通过返回值来判断命令是否执行成功

import os
ret=os.system("mspaint e://tupian.jpg" )
if ret==0:
    print('file copied')
else:
    print('code file failed')

2、subprocess

(1)subprocess库里的check_output
会得到终端上输出的文本
subprocess.check_output需要等到被调用程序退出,才能返回。

import subprocess
#shell=True表示使用终端shell执行程序,Windows下面就是cmd.exe
#第一个参数传要执行的命令,就是我们Python程序调用cmd.exe,再由cmd.exe执行参数
ret=subprocess.check_output('dir',shell=True,encoding='gbk')

#如果有中文,需要decode,因为中文os,所以输出是gbk编码
print(ret)
# print(ret.decode('gbk'))

(2)subprocess库里的Popen类

不需要等程序退出就能能获取其输出的信息
可以实现,并且运行时,输入一些信息给被调用程序。
python调用外部程序_第1张图片
encode参数要看对输出有没有编码要求再填写,就像上面的示例代码一样。

不需要等程序退出就能能获取其输出的信息

from  subprocess import Popen
#不需要等待画图工具关闭,后面的代码继续执行
popen =Popen(
    args=r'e:\mspaint',
    shell=True
)
print("done")

运行时,输入一些信息给被调用程序
输入输出重定向
得到外部程序的输出

from  subprocess import Popen,PIPE
#stdout这个参数就是标准输出到管道(PIPE)
popen =Popen(
    'dir c:',
    stdout=PIPE,
    stderr=PIPE,
    shell=True,
    encoding='gpk'
)
output,err=popen.communicate()
print(output)

你可能感兴趣的:(Python)