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秒钟(我的设备上,即使换别的时间也不会短很多吧?),有没有人能够教教我,对于效率问题,我总是耿耿于怀!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值