zoukankan      html  css  js  c++  java
  • 《自拍教程70》Python adb一键录屏

    本篇文章,主要介绍如何通过Python发送Ctrl + C的信号,中断正在执行的任务。

    案例故事: Android系统测试或App测试过程中,
    可以考虑用adb shell screenrecord /sdcard/video.mp4 命令录制屏幕视频,
    比如录制某个Bug发生的整个过程,比用手机拍摄的视频效果好很多,
    当录制完毕后,我们一般是通过Ctrl + C 来停止录制,然后导出该录屏文件,

    其实我们可用Python脚本实现一键录屏。


    准备阶段
    1. adb shell screenrecord /sdcard/video.mp4 可以录制屏幕视频。
    2. 由于以上录制屏幕视频的命令是一个持续输出的命令,
      它如果没被中断,会一直持续录制下去,直到满3分钟,
    3. os.system可以调用以上命令。
    4. 捕获KeyboardInterrupt异常(即发送Ctrl + C中断信号),中断录制任务。

    Python批处理脚本形式

    记住批处理脚本的精髓: 顺序执行Python语句

    import os
    
    command = "adb shell screenrecord /sdcard/video.mp4"
    
    try:
        print("后台录屏中,您可以Ctrl + C随时结束录制!")
        os.system(command)  # 开始执行adb录屏命令, 如果不做任何操作,默认最多录制3分钟(180秒)
    except KeyboardInterrupt:  # 随时接收Ctrl + C的信号
        os.system("adb pull /sdcard/video.mp4 .")  # # 导出视频文件来
    
    print("录制结束,录屏文件导出到了: %s" % os.path.join(os.getcwd(), "video.mp4"))
    os.system("pause")
    

    Python面向过程函数形式

    找到可以封装成一个函数块的小代码块儿, 用函数封装起来.
    函数的命名一般建议用"动词", 所以我们命名为: "record_screen",
    封装好后, 用record_screen()函数调用即可。

    # coding=utf-8
    import os
    
    
    def record_screen():
        command = "adb shell screenrecord /sdcard/video.mp4"
        try:
            print("后台录屏中,您可以Ctrl + C随时结束录制!")
            os.system(command)  # 开始执行adb录屏命令, 如果不做任何操作,默认最多录制3分钟(180秒)
        except KeyboardInterrupt:  # 随时接收Ctrl + C的信号
            os.system("adb pull /sdcard/video.mp4 .")  # # 导出视频文件来
        print("录制结束,录屏文件导出到了: %s" % os.path.join(os.getcwd(), "video.mp4"))
    
    
    record_screen()
    os.system("pause")
    
    

    Python面向对象形式

    以"一切皆可归类"的思想, 先抽象化出一个类来,
    类名一般建议用"名词", 所以我们命名为"ScreenRecorder",
    代表屏幕录制器, 且一般要驼峰式(首字母大写)来规范类的命名.
    养成良好的类的初始化(init)的习惯,
    初始化过程中, 可以pass(什么都不做)
    这个ScreenRecorder 类, 目前只需要一个录屏的函数(动作功能)就足够了,
    函数的命名一般建议用"动词", 所以我们命名为: "record_screen" .
    类是一个抽象的事物, 必须实例化成具体的对象后,
    才能进行调用, 所以我们实例化并命名成了s_obj, 表明是一个对象.
    实例化成具体对象后, 对象就可以调用record_screen这个函数了.

    # coding=utf-8
    import os
    
    
    class ScreenRecorder():
        def __init__(self):
            self.command = "adb shell screenrecord /sdcard/video.mp4"
    
        def record_screen(self):
            try:
                print("后台录屏中,您可以Ctrl + C随时结束录制!")
                os.system(self.command)  # 开始执行adb录屏命令, 如果不做任何操作,默认最多录制3分钟(180秒)
            except KeyboardInterrupt:  # 随时接收Ctrl + C的信号
                os.system("adb pull /sdcard/video.mp4 .")  # # 导出视频文件来
            print("录制结束,录屏文件导出到了: %s" % os.path.join(os.getcwd(), "video.mp4"))
    
    
    if __name__ == '__main__':
        s_obj = ScreenRecorder()
        s_obj.record_screen()
        os.system("pause")
    

    代码运行方式与效果

    确保Android设备通过USB线与电脑连接了,adb设备有效连接,
    以上代码的3种实现形式都可以直接运行,比如保存为screen_record.py并放在桌面,
    建议python screen_record.py运行,当然也可以双击运行。


    小提示:本来更科学的方法应该是用subprocess.Popen()类的send_signal(signal.CTRL_C_EVENT)函数来实现Ctrl + C,
    但是发现并不能实现Ctrl + C信号,所以最终还是捕获KeyboardInterrupt异常这种方式实现,
    subprocess.Popen()类功能还是很强大的,后续案例还会介绍到。


    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=04ecbd58cb304d0fa1c2034ccaa3260d
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    CAsyncSocket网络编程(MFC)
    CSDN回帖得分大全(近两年)
    VC:使用Windows Socket开发应用程序
    MFC对Socket编程的支持
    计算机操作系统
    计算机基础
    计算机发展历史
    iOS开发之国际化
    iOS开发之iOS程序偏好设置(Settings Bundle)的使用
    iOS中使用RegexKitLite来试用正则表达式 使用ARC 20个错误解决办法
  • 原文地址:https://www.cnblogs.com/zipython/p/13105174.html
Copyright © 2011-2022 走看看