• 笔记||Python3进阶之调用外部程序


    像wget可以下载文件
    ffmpeg可以切割、合并、转换、录制视频
    free命令可以查看linux内存使用信息

    python提供了库来调用外部程序、命令?
    最常见的两种方法:
           ①os.system os库里面的system参数
           ②subprocess subprocess库 里面的对和函数

    如:

           import os
           os.system('notepad')
           print('记事本已关闭')
    注意:调用外部程序没有退出时,python程序会一直停在那里


    对于有参数的命令,os.system()参数 直接把参数放在字符串中一起传入即可

    向记事本传递参数,打开python.txt文件?

    如:
           import os
           os.sys('notepad c:python.txt')

    =====================================================

    python实现录屏功能?

    import os

    # 输出视频文件
    import time

    outputfile = 'C:shipin' + time.strftime('%Y%m%d_%H%M%S', time.localtime()) + '.mp4'

    # 工具目录
    ffmpeg = r'C:FFmpeg安装包ffmpeg-4.1-win64-staticinffmpeg.exe'

    settings = [
    '-y -rtbufsize 100M -f gdigrab -framerate 10', # 帧率等
    '-offset_x 1000 -offset_y 0 -video_size 640x480', # 录制指定屏幕区域
    '-draw_mouse 1 -i desktop -c:v libx264', # 视频编码格式
    '-r 20 -preset medium -tune zerolatency -crf 35', # 视频压缩参数
    '-pix_fmt yuv420p -fs 100M -movflags +faststart "%s"' % outputfile # 大小限制 等
    ]

    # 将参数组合起来
    recordingCmdLine = ' '.join([ffmpeg]+settings)

    # 查看命令内容
    print(recordingCmdLine)

    # 执行命令录制视频
    os.system(recordingCmdLine)

    ======================================================================================
    # 返回值
    # 不管windows还是linux,如果一个程序它的退出码为0就是表示成功的话
    # 如果我们只需要判断调用是否成功,也就是是否为0

    import os
    import subprocess


    # ret = os.system('ls')
    # if ret == 0:
    # print(ret)


    # os.system提供了简单的调用其他程序的功能
    # 而python里面有另一个模块subprocess,提供了更为强大的功能
    # 使用subprocess最常见的目的就是检查应用的输出


    # 因为os.system只能获得返回码,输出到屏幕的内容并不能获取
    # 如果想获取被调用的命令或工具输出到终端的信息,并进行处理,可以使用subprocess库里面的check_output函数
    # 这个方法需要等到被动月供程序退出,才能返回
    # shell=True 表示使用终端shell执行程序;参数encoding:指定哪种解码方式,
    # 不填,是缺省值None,需要我们自己去解码
    # ret = subprocess.check_output('dir', shell=True, encoding='gbk')
    # print(ret)
    # print(ret.decode('gbk'))# 如果我们需要被调用程序还没退出时,就获取其输出的信息;# 或者在被调用程序运行的过程中,输入一些信息给被调用程序

    # 需要使用subprocess库里面的Popen类
    # Popen可以非阻塞式调用外部程序,也就是说,无需等待被调用程序结束。脚本的代码可以继续往下执行
    from subprocess import PIPE,Popen
    # popen = Popen(args='notepad c:python.txt', shell=True)
    # print('done')

    # Popen同样可以获取外部程序的输出
    # stdout=PIPE 表示将被调用的程序的标准输出信息获取到管道文件中
    # 要获取程序的输出信息,就要这样指定。
    popen = Popen('dir c:',
                              stdout=PIPE,
                              shell=True,
                              encoding='gbk')
    output, err = popen.communicate()
    print(output)
    print('----------------------------------------------')
    print(err)

  • 相关阅读:
    睡眠错误
    Linux中安装Mysql授权远程访问
    lamp安装
    MySQL 数据类型(Day41)
    MySQL 表操作 (Day40)
    MySQL之存储引擎(Day39)
    MySQL下载安装
    python并发编程之IO模型(Day38)
    同步锁,死锁现象与递归锁,信息量Semaphore.....(Day36)
    多线程并发练习(Day35)
  • 原文地址:https://www.cnblogs.com/peipei-Study/p/12095391.html
Copyright © 2020-2023  润新知