python subprocess的Popen()和call()(adb)

最近要用到adb連接手機截圖,在CMD上:
adb shell /system/bin/screencap -p /sdcard/screenshot.jpg #截圖保存在手機上
adb pull /sdcard/screenshot.jpg d:/screenshot.jpg #將圖片複製到電腦上

這兩句話,整個百度都是,也沒問題,然而,當我想用python實現這兩句話的時候,卻一直都不能成功,圖片總是無法完整的複製到電腦上,百度上用到的方法,找來找去,就這幾個:os.popen(),os.system(),subprocess.Popen().都不行。我當時按照百度的資料,形如下面這樣測試:

import os

os.popen(" adb shell /system/bin/screencap -p /sdcard/screenshot.jpg ")
os.popen(" adb pull /sdcard/screenshot.jpg  d:/screenshot.jpg ")

上述三種方法我都試過,都不行,從現象來看,問題就在於,這些指令都沒問題,都是執行了的,但是,他就是不能完整執行完就結束了,我也很納悶,爲什麼會這樣。

然後看到了什麼阻塞不阻塞的,我想,阻塞的話,是不是就能執行完整了?查資料,資料不多,關鍵說的不清楚,還有錯的,有說os.popen()阻塞,subprocess.Popen()非阻塞的,也有反過來說的。但是爲什麼兩種方法我都測試了,都不行呀,到底誰是阻塞的呀。。

直到看到這篇文章,才找到解決辦法, subprocess.Popen()想阻塞,還得加一個wait(),即subprocess.Popen().wait()。實際上這就是subprocess.call(),這個纔是阻塞的,這樣就可以完整執行了。爲什麼網上大多數資料都不需要用到這個函數就能夠成功執行呢?難道是我用的python3.6功能不完善?

順便吐槽一下,adb截圖爲什麼效率這麼低呀。。截圖加複製差不多需要3秒鐘(我的設備上,即使換別的時間也不會短很多吧?),有沒有人能夠教教我,對於效率問題,我總是耿耿於懷!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章