第22课 调用外部程序

Posted nick1998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第22课 调用外部程序相关的知识,希望对你有一定的参考价值。

一、调用外部程序

1、为什么python被称为胶水语言:python可以粘合各种外部程序和各种语言的库,实现特定的功能。

2、os库里面的system函数,相当于打开操作系统的shell,敲入一个命令,比如打开msprint命令----打开windows下的画图工具。

3、os.system( )    #如果是系统应用直接写程序名称,如mspaint画图程序;

   如果是第三方应用,需要加上路径名,即:路径+程序名,如打开QQ--- os.system(‘D:QQTencentQQBinQQScLauncher.exe‘)

4、返回值:有些程序退出后会有一个退出码

  1--表示程序是否正确实现了其功能

  2--Linux的命令, 比如ls;echo $?

5、python在调用这些程序时,退出码作为返回值返回

  1--windows :如果是cmd.exe,返回值就是进程的退出码。

  2--Linux:

    1----会返回一个16位的数字

    2----低位字节,表示结束进程的信号数值

    3-----如果低位字节值为0,高位字节表示退出码

6、通过subprocess库里面的check_output调用外部程序

  1---subprocess库里面的Popen类,可以

    1---被调用程序运行的时候,就获取其输出的信息

    2---运行时,输入一些信息给被调用程序

  2、subprocress.Popen(args,....stdin = None, stdout = None,,,,  shell = False,.......)

    1...args参数要么是列表,要么是一个字符串-------popen = Popen(args=[‘mspaint‘, r‘d:1.jpg‘])

  3、shell = True 表示用shell去执行,args应该是字符串;

        shell = False 表示不是用shell去执行,args参数应该是一个列表

7、非阻塞式调用外部程序

  1---调用外部程序后,Python程序继续执行

8、输入输出重定向    得到外部程序的输出

 

 

2-1

import os
os.system(mspaint)    #打开画图工具
print(after call)   #画图软件不关闭的话,后面的打印语句不会执行。只有关闭了画图工具,才会执行后面一条语句。

执行结果:


D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54  python对外部程序的调用/lesson54 知识点.py"

技术图片

 

 

3--2 打开系统应用

import os
os.system(D:QQTencentQQBinQQScLauncher.exe)   #打开第三方应用,格式:os.system(‘路径.应用程序‘)
                    

执行结果:


D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54  python对外部程序的调用/lesson54 知识点.py"

Process finished with exit code 0

技术图片

 

 

 6-1 通过subproces.check_output来调用外部程序

import subprocess

# shell= True 表示使用终端shell执行程序,windows下就是cmd.exe
# 就是python程序电泳cmd.exe  再由cmd.exe执行参数命令
ret = subprocess.check_output(dir, shell = True, decode = gbk)
# 如果有中文,需要用decode,因为是中文os,所以cmd.exe输出是gbk编码
print(ret)


输出结果:

D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54  python对外部程序的调用/lesson54 知识点.py"
 驱动器 D 中的卷是 软件
 卷的序列号是 DDA0-504F

 D:ProgramsHelloWorld2songqinpythonlesson54  python对外部程序的调用 的目录

2020-07-02  13:19    <DIR>          .
2020-07-02  13:19    <DIR>          ..
2020-07-02  13:19             2,237 lesson54 知识点.py
2018-08-22  20:43                 0 __init__.py
               2 个文件          2,237 字节
               2 个目录 237,996,130,304 可用字节


Process finished with exit code 0

另外一种写法:

ret = subprocess.check_output(dir, shell = True)

print(ret.decode(gbk))

 

6-2    subprocress.Popen(args,....stdin = None, stdout = None,,,,  shell = False,.......)

import subprocess

popen = subprocess.Popen(args = mspaint, rF:1.JPG, shell = False)   #用Popen调用画图工具,打开一副名字为1的照片,shell = False可以省略



执行结果:
D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54  python对外部程序的调用/lesson54 知识点.py"

Process finished with exit code 0

 

7-1   非阻塞式调用外部程序

from subprocess import PIPE, Popen

process = Popen(
        args = mspaint,
        shell = True
)

print(done)     #打开画图工具的同时,也执行了print语句,非阻塞式调用。


执行结果:

D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54  python对外部程序的调用/lesson54 知识点.py"
done

Process finished with exit code 0

 

8-1  输入输出重定向

from subprocess import PIPE, Popen


popen = Popen(
             dir c:,
             stdout = PIPE,
        stderr = PIPE, shell
= True, encoding = gbk) output, err = popen.communicate() print(output) print(err) # 如果路径正确,则err返回为空 执行结果: D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54 python对外部程序的调用/lesson54 知识点.py" 驱动器 C 中的卷没有标签。 卷的序列号是 A6B6-88CC C: 的目录 2020-07-01 17:51 <DIR> DRMsoft 2020-05-29 11:28 <DIR> Program Files 2020-06-17 17:18 <DIR> Program Files (x86) 2019-06-12 15:51 <DIR> soft 2019-03-19 13:04 <DIR> Users 2020-06-21 10:13 <DIR> Windows 0 个文件 0 字节 6 个目录 71,575,941,120 可用字节 Process finished with exit code 0

8-2  如果路径出错,则会打印错误信息

from subprocess import Popen, PIPE

popen = Popen(
    dir c:\\asdf,
    shell= True,
    stdout = PIPE,
    stderr= PIPE,
    encoding = (gbk))

output,err = popen.communicate()
print(output)
print(--------------------------)
print(err)



执行结果:
D:Pythonpython.exe "D:/Programs/HelloWorld2/songqin/python/lesson54  python对外部程序的调用/lesson54 知识点.py"
 驱动器 C 中的卷没有标签。
 卷的序列号是 A6B6-88CC

 c: 的目录


--------------------------
找不到文件


Process finished with exit code 0

 

以上是关于第22课 调用外部程序的主要内容,如果未能解决你的问题,请参考以下文章

第22课.对象的销毁

第39课 程序中的三国天下

跟我一起学编程—《Scratch编程》第22课:颠弹力球

第39课 程序中的三国天下

22.java方法的定义

第27课 《前端发展热点》