python3 自動(dòng)識(shí)別usb連接狀態(tài),即對(duì)usb重連的判斷方法
在做自動(dòng)化測(cè)試時(shí),遇到兩種情況需要判斷usb是否已連接上(注,本文僅針對(duì)用adb命令來(lái)control手機(jī))
一種是在開測(cè)時(shí)(前提是同時(shí)要測(cè)試多臺(tái)), 希望等待所有設(shè)備usb全部識(shí)別后同時(shí)進(jìn)行測(cè)試。對(duì)于這一種,當(dāng)然是可以另開一個(gè)窗口不斷的輸入adb devices來(lái)檢測(cè),但不夠AI。
一種是在測(cè)試過(guò)程中有時(shí)usb會(huì)自動(dòng)斷開,這時(shí)如果不判斷usb是否有重新連接的話,則測(cè)試還會(huì)往下執(zhí)行,測(cè)試指定是失敗的。
第一種情況:其思路還是要利用adb devices來(lái)不斷的獲取當(dāng)前已連接的設(shè)備id。
1.先獲取一個(gè)devlist, 并計(jì)算當(dāng)前已連接的設(shè)備數(shù).
2.利用while循環(huán),當(dāng)重新獲取一個(gè)devlist時(shí),其設(shè)備數(shù)大于之前的設(shè)備數(shù),則遍歷new devlist,當(dāng)new device不在old devlist里時(shí),就print出deviceid, 即實(shí)現(xiàn)了對(duì)usb的實(shí)時(shí)識(shí)別并打印了.
具體實(shí)現(xiàn)如下:
import os from time import sleep # 獲取設(shè)備id列表 def getdevlist(): devlist = [] connectfile = os.popen('adb devices') list = connectfile.readlines() # print(list) for i in range(len(list)): if list[i].find('\tdevice') != -1: temp = list[i].split('\t') devlist.append(temp[0]) return devlist connectdevice = input('請(qǐng)輸入每次要同時(shí)連接的設(shè)備數(shù):') number = int(connectdevice.strip()) while True: lists = getdevlist() devnum = len(lists) id = 1 tempdevlist = getdevlist() if devnum < number: print(f'\n設(shè)備未全部識(shí)別,應(yīng)識(shí)別{number}臺(tái)設(shè)備!\n當(dāng)前已識(shí)別{devnum}臺(tái)設(shè)備,請(qǐng)連接設(shè)備并等待識(shí)別:\n\n') for i in range(devnum): print(f'設(shè)備{id}: {lists[i]}') id = id + 1 # 等待識(shí)別所有設(shè)備 while devnum < number: lists = getdevlist() curnum = len(lists) if curnum > devnum: for i in range(len(lists)): if lists[i] not in tempdevlist: print(f'設(shè)備{id}: {lists[i]}') id = id + 1 tempdevlist = getdevlist() devnum = curnum print(f'\n所有設(shè)備已全部識(shí)別!當(dāng)前有連接{len(getdevlist())}臺(tái)設(shè)備.\n\n')
第二種情況:第二種情況的前提的已知當(dāng)前已連接設(shè)備的deviceid, 這個(gè)不難理解也不難獲取,其思路跟第一種情況也差不太多,不過(guò)我將其封裝成了一個(gè)函數(shù). 應(yīng)用場(chǎng)景其實(shí)在實(shí)際應(yīng)用過(guò)程中,總有那個(gè)一兩個(gè)地方,總會(huì)概率的usb斷開然后又自動(dòng)連接上,但這樣就會(huì)執(zhí)行失敗,故對(duì)這樣的概率會(huì)fail的場(chǎng)景先要做到了然于胸,才能在實(shí)適當(dāng)?shù)牡胤疆?dāng)判斷來(lái)進(jìn)行重連,做到代碼簡(jiǎn)潔。
import os from time import sleep def reconnectAction(deviceid): devlist = getdevlist() print(f'設(shè)備{deviceid}正在嘗試重連.') id = 1 while deviceid not in devlist: print(f'第{id}次 ', end = ' ') devtuple = getdevlist() id = id + 1 print(f'\n設(shè)備{deviceid}重新建立連接成功.') sleep(1) # example: if __name__ == '__main__': deviceid = '12lk34fkjaaf' if clickScreen(openfilemanager, deviceid) != 0: print(f'{openfilemanager[1]}:執(zhí)行失敗‘) reconnectAction(deviceid) clickScreen(openfilemanager, deviceid)
OK, 任務(wù)完成。
以上這篇python3 自動(dòng)識(shí)別usb連接狀態(tài),即對(duì)usb重連的判斷方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在SQLite-Python中實(shí)現(xiàn)返回、查詢中文字段的方法
今天小編就為大家分享一篇在SQLite-Python中實(shí)現(xiàn)返回、查詢中文字段的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07快速解決Django關(guān)閉Debug模式無(wú)法加載media圖片與static靜態(tài)文件
這篇文章主要介紹了快速解決Django關(guān)閉Debug模式無(wú)法加載media圖片與static靜態(tài)文件的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀
這篇文章主要介紹了Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Python開發(fā)之迭代器&生成器的實(shí)戰(zhàn)案例分享
在 Python 中,迭代器和生成器都是用來(lái)遍歷數(shù)據(jù)集合的工具,可以按需逐個(gè)生成或返回?cái)?shù)據(jù),從而避免一次性加載整個(gè)數(shù)據(jù)集合所帶來(lái)的性能問題和內(nèi)存消耗問題。本文主要和大家分享幾個(gè)貼近實(shí)際運(yùn)維開發(fā)工作中的場(chǎng)景案例,希望對(duì)大家有所幫助2023-04-04Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
這篇文章主要介紹了Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n],文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02國(guó)產(chǎn)化設(shè)備鯤鵬CentOS7上源碼安裝Python3.7的過(guò)程詳解
這篇文章主要介紹了國(guó)產(chǎn)化設(shè)備鯤鵬CentOS7上源碼安裝Python3.7,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05