本篇文章,主要介紹如何通過Python發送Ctrl + C的信號,中斷正在執行的任務,
案例故事: Android系統測驗或App測驗程序中,
可以考慮用adb shell screenrecord /sdcard/video.mp4 命令錄制螢屏視頻,
比如錄制某個Bug發生的整個程序,比用手機拍攝的視頻效果好很多,
當錄制完畢后,我們一般是通過Ctrl + C 來停止錄制,然后匯出該錄屏檔案,
其實我們可用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運行,當然也可以雙擊運行,
小提示:本來更科學的方法應該是用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
也可關注“武散人”微信訂閱號,隨時接受文章推送,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/136654.html
標籤:Python
