一、两种方式
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')
(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类
不需要等程序退出就能能获取其输出的信息
可以实现,并且运行时,输入一些信息给被调用程序。
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)