测试成长记录:python调adb无法获取设备信息bug记录
背景介绍:
一直在负责公司Android自动化的编写工作,采用的是uiautomator2,需要获取设备id来连接设备,就是 adb devices
问题描述:
之前一直用 subprocess.check_output(['adb','devices']) 来获取返回值,再用正则匹配id出来,但突然有一天 ubprocess.check_output(['adb','devices']) 的返回值变成了空。
而在cmd运行 adb devices 却是正常的,而且 subprocess.check_output(['adb','help'])等命令执行又是正常的,只有执行获取设备信息方面的命令拿不到返回值


问题分析:
这让我很是头大,第一次遇到这个问题,我先后尝试过重装python、adb、AndroidSDK,但都没有用,请教过很多人也都说没遇到过,后来又去testhom 和 Stack Overflow去发帖求助,也没找到答案
我试着去查看python 的subprocess.py 的源码,大概情况是这样子:
subprocess.check_output() 里面调用的是 一个run() 方法
def check_output(*popenargs, timeout=None, **kwargs):
#省略~~~~~~
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
**kwargs).stdout
而run()方法最终调用的是 Popen()
def run(*popenargs,
input=None, capture_output=False, timeout=None,
check=False, **kwargs):
.......
........
with Popen(*popenargs, **kwargs) as process:
try:
stdout, stderr = process.communicate(input, timeout=timeout)
except TimeoutExpired as exc:
process.kill()
在debug过程中发现在 popen这一步就已经失败了,随后又进入Popen()查看,发现最终是 死在了 Start the process 这里(subprocess 模块,1200行那块)

看情况是创建process时失败了,随后猜想可能是被系统拦截了,或者没有权限~~
最终结果:
我找到adb.exeg 给它加上了所有的权限,运行仍就失败~不起作用
后来看到里面有个兼容性的选项,我试着打了√再去运行,~~神奇的事情发生了,竟然就可以了emmmmm
总结:
至今出现这个问题的原因仍就没搞明白,不知道为什么会出现这个问题,由于能力有限,再往深也查不下去了;但这里肯定是有问题的,因为最初搭建环境的时候adb并没有勾选
兼容模式,执行subprocess.check_output()是可以获取到结果的,但后面突然就拿不到了~~如果有大神知道原因的话可以一起交流一下,我也很想弄明白这到底是什么问题
测试成长记录:python调adb无法获取设备信息bug记录的更多相关文章
- appium自动化测试框架——封装获取设备信息类
在上一节中,我们已经解决了如何在python中执行cmd,并获取执行结果.下面就小小实战一下,获取设备信息. 一.思路 1.windows上获取设备信息的方法 输入dos命令“adb devices” ...
- Android 获取设备信息 异常
/**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ ...
- React Native(五)——获取设备信息react-native-device-info
心酸史: 自从接触rn开始后,越来越多的引入第三方组件而开始的配置文件,让自己一再头疼: 明明是按照官方文档一步一步的配置,为什么别人可以做到的自己却屡屡出错,真是哭笑不得--从微信分享react-n ...
- 微信小程序 --- 获取设备信息
获取设备信息: wx.getSystemInfo model:手机型号 pixelRatio:设备像素比 windowWidth:窗口宽度 windowHeight:窗口高度 language:语言 ...
- PhoneGap获取设备信息
一. 获取设备信息的方法列表(如果没有或者检测不出来就显示undefined) 1.device.name 设备名称(一些国产机检测不出来) 2.device.model ...
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载五(使用PhoneGap获取设备信息)
除了能够将HTML页面打包成可以直接安装运行的APP外,PhoneGap的一个最大优势在于可以通过JavaScript调用设备来访问设备上的硬件信息,从而实现一些原本只有依靠原生SDK才能够达到的目的 ...
- 微信小程序把玩(三十八)获取设备信息 API
原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...
- python 面向对象编程、获取对象信息
面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...
- JavaWeb学习记录(八)——servlet获取配置信息
jdbc.properties内容如下: jdbcUrl=jdbc\:mysql\://localhost\:3306/animaluser=rootpass=root servlet获取资源信息代码 ...
随机推荐
- Codeforces Round #626 (Div. 2) E. Instant Noodles(二分图,最大公因数)
题意: 给你一个二分图,求左侧端点的所有可能子集中的点相连的右侧端点的权值的和的最大公因数. 题解: 若所有右侧端点均不在同一左侧子集中,则求所有权值的最大公因数即可 . 否则,将在相同左侧子集中的右 ...
- 2020 年百度之星·程序设计大赛 - 初赛一Dec 简单dp
题意: Problem Description 初始有 a, ba,b 两个正整数,每次可以从中选一个大于 1 的数减 1,最后两个都会减到 1,我们想知道在过程中两个数互质的次数最多是多少. Inp ...
- Java 窗口 绘制图形 #3
写在前面: 高数下学到第二章,突发奇想要写一个程序画二元函数图像 思路分了三层: ①抽象层: 因变量z,自变量x.y,坐标原点x0.y0.z0 ②投影实现层: 屏幕投影坐标px.py,x轴与屏幕水平方 ...
- Relatives POJ - 2407 欧拉函数
题意: 给你一个正整数n,问你在区间[1,n)中有多少数与n互质 题解: 1既不是合数也不是质数(1不是素数) 互质是公约数只有1的两个整数,叫做互质整数.公约数只有1的两个自然数,叫做互质自然数 所 ...
- 实战交付一套dubbo微服务到k8s集群(8)之configmap使用
使用ConfigMap管理应用配置 拆分环境 主机名 角色 IP地址 mfyxw10.mfyxw.com zk1.od.com(Test环境) 192.168.80.10 mfyxw20.mfyxw. ...
- 4.Redis客户端的使用
标题 : 4.Redis客户端的使用 目录 : Redis 序号 : 4 Console.WriteLine($"北京和天津之间的距离是:{distance}公里"); #### ...
- sqlmap在https情况下的一个错误
对于https网站,使用sqlmap可能会出现如下错误.使用–force-ssl无效. https证书有问题 方法 本地建立proxy.php,内容为 <?php $url = "ht ...
- msf 信息收集
MSF信息收集 转载自天堂空气 一 MSF主机发现 0x1:搜索arp 0x2:使用use auxiliary/scanner/discovery/arp_sweep 模块,然后show option ...
- Makefile 流程控制(error,warning)等调试选项
1.退出码 0 ok1 错误2 使用了-q 选项 且目标不需要更新 返回2 2.选项 -f --file 指定makefile脚本 -n --just-print --dry -run -- reco ...
- Vue & Sentry sourcemaps All In One
Vue & Sentry sourcemaps All In One vue & sentry & sourcemaps https://docs.sentry.io/plat ...