zoukankan      html  css  js  c++  java
  • 第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', r'F: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
  • 相关阅读:
    win7网络共享原来如此简单,WiFi共享精灵开启半天都弱爆了!
    JQUERY UI Datepicker Demo
    Official online document, install svn server in centOS
    JAVE not work in linux
    AMR 转mp3 失败
    XD, XR, DR 股票
    Linux 下MySql 重置密码
    Difinition Of Done
    Apache, Tomcat, JK Configuration Example
    Linux 安装tomcat
  • 原文地址:https://www.cnblogs.com/nick1998/p/13226162.html
Copyright © 2011-2022 走看看