此贴终结:
这个问题困扰了我好久,也翻墙到了 stackoverflow 去发帖求助仍没找到答案
今天又重新研究了一下这个问题,
大概情况是这样
执行 subprocess.check_output(['adb', 'devices']) 时,里面最后调的是 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 下去,发现是在 Start the process 时就直接失败了,最终死在了这里
class Popen(object):
。。。。
。。。。
。。。。
# Start the process
try:
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
# no special security
None, None,
int(not close_fds),
creationflags,
env,
os.fspath(cwd) if cwd is not None else None,
startupinfo)
finally:
........
.........
随后我猜想可能是请求被 win 系统拦截了,或者是权限问题,随后我找到 adb,右键属性 - 先是 - 勾选'完全控制',加了所有的权限,再运行扔不起作用,
后来看到里面有个兼容性,我就是试着勾选上在运行~~神奇的事情发生了!!!竟然就可以了!
原因仍就没找到~~~,大神们有兴趣可以研究一下
不是环境变量的问题,已经解决了,但原因还不知道是为什么~~
除了 adb devices 外,adb --version 同样也拿不到返回值,但执行 adb --help 却能拿到
一样的,同样是拿不到,早就试过了
不行,现在就是 python 调 adb 获取返回内容不行,执行命令可执行,很诡异
操作执行命令都可以执行,只是没有返回值,搞得我头都大了
是一个,我电脑只有这一个 adb,调 adb 其它操作都正常,唯独 调设备信息类的都没有返回值
一样,不管用
不起作用,它并没有报错,只是返回内容是空的
不行
我刚找 it 格式化了 c 盘重装系统都不行~~~,,真屌了
试过了,还是一样
没用,重启过 N 次了,adb 和 python 我都重装过好几次了,都不行
这样拿到的是一个空列表
,
我这执行 adb 其他命令都正常,但就获取设备信息类的命令,全部拿不到返回值,os.ponen 啥的命令也是一样的情况,,查了两天了也没定位到原因
哦对了,执行 version 也不行
list(os.popen('adb --version').readlines())
[]
不管用,还是空的