测试成长记录: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获取资源信息代码 ...
随机推荐
- P3195 [HNOI2008] 玩具装箱(斜率优化DP)
题目链接 设\(d[i]\)为将前 \(i\) 个玩具装入箱中所需得最小费用 容易得到动态转移方程: \[d[i] = min(d[j] + (s[i]-s[j]+i-j-1-L)^2), (j< ...
- hdu5289 Assignment
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...
- JavaScript——浏览器检查
遍历opera中的所有方法
- Codeforces Round #653 (Div. 3) B. Multiply by 2, divide by 6 (数学)
题意:有一个数\(n\),每次操作可以使\(n*=2\)或\(n/=6\)(如果能被整除),求最少操作次数使得\(n=1\),如果不满足,输出\(-1\). 题解:我们只要看\(n\)的质因子即可,如 ...
- linux 部署 .net core mvc
1.本地编写一个mvc网站 代码编辑器:Visual studio 2017.2019.Visual Code 均可 1)搭建 略. (请自行搜索如何编辑mvc,或看文末参考链接) 2)配置 Prog ...
- codeforces - 978D【思维】
D. Almost Arithmetic Progression time limit per test 1 second memory limit per test 256 megabytes in ...
- Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
最近时间有点紧,暂时先放参考链接了,待有时间在总结一下: 查了好多,这几篇博客写的真心好,互有优缺点,大家一个一个看就会明白了: 参考 1. 先看这个明白拉链法(链地址法),这个带源码,很好看懂,只不 ...
- HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解
题意:给你些分数串,给你一个主串,主串每出现一个分数串加一分,要你重新排列主串,最多几分 思路:显然这里开$40^4$去状压内存不够.但是我们自己想想会发现根本不用开那么大,因为很多状态是废状压,不是 ...
- C++中函数的形式参数引用
形式参数的传递方式 值传递 值传递是将数值传递到程序中,这种方式传递是单向传递 但是如果想要双向传递,这种视频无法满足: 引用传递 引用传递可以实现双向的传递 为了对比处两个之间的差异,这里举出两个例 ...
- XSS脚本汇总
(1)普通的XSS JavaScript注入<SCRIPT SRC=http://***/XSS/xss.js></SCRIPT> (2)IMG标签XSS使用JavaScrip ...