python 录屏_《自拍教程70》Python adb一键录屏

本文介绍了如何通过Python脚本配合adb命令实现Android设备的一键录屏和终止录制。利用try-except结构捕获KeyboardInterrupt异常,模拟Ctrl+C中断录屏,并自动导出视频文件。
摘要由CSDN通过智能技术生成

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

案例故事: Android系统测试或App测试过程中,

可以考虑用adb shell screenrecord /sdcard/video.mp4 命令录制屏幕视频,

比如录制某个Bug发生的整个过程,比用手机拍摄的视频效果好很多,

当录制完毕后,我们一般是通过Ctrl + C 来停止录制,然后导出该录屏文件,

5baf3444875ffb1a2488e4c9c58e12f1.png

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

准备阶段

adb shell screenrecord /sdcard/video.mp4 可以录制屏幕视频。

由于以上录制屏幕视频的命令是一个持续输出的命令,

它如果没被中断,会一直持续录制下去,直到满3分钟,

os.system可以调用以上命令。

捕获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运行,当然也可以双击运行。

8271eca43d598d151be117806ce7ffcc.png

小提示:本来更科学的方法应该是用subprocess.Popen()类的send_signal(signal.CTRL_C_EVENT)函数来实现Ctrl + C,

但是发现并不能实现Ctrl + C信号,所以最终还是捕获KeyboardInterrupt异常这种方式实现,

subprocess.Popen()类功能还是很强大的,后续案例还会介绍到。

原文链接:https://www.cnblogs.com/zipython/p/13105174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值