问题描述:
adb devices 获取设备信息正常,但 python 调 cmd 就拿不到返回值
如图:adb 查看正常
python 调用返回空
调用 help 等命令有返回值,目前看就 设备相关信息返回为空
自己 debug 到这里就已经是空了,再往下看不下去了,有没有人遇到过同样的问题
(之前一直是 OK 的,不知怎么突然就没返回值了,os.popen 等命令也同样问题)
adb,python 卸载重装都不管用,,只差重装系统了
加个 shell=True 试试
readDeviceId = list(os.popen('adb devices').readlines())
试试这样呢
这样拿到的是一个空列表
,
我这执行 adb 其他命令都正常,但就获取设备信息类的命令,全部拿不到返回值,os.ponen 啥的命令也是一样的情况,,查了两天了也没定位到原因
哦对了,执行 version 也不行
list(os.popen('adb --version').readlines())
[]
重启一下电脑吧。
重启 adb, adb kill-server 再 adb start-server
process = subprocess.Popen("adb devices", shell=True, stdin=subprocess.DEVNULL,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output = process.stdout.readlines()
err = process.stderr.readlines()
这样看看行不行哇
换个手机也不行吗
设 stderr=subprocess.STDOUT
rst=os.popen('adb devices').read()
devices=re.findall(r'(.*?)\s+device', rst)
关掉杀软
你 python 调用的 adb 和你本地使用的 adb 是同一个吗
subprocess.check_output("adb devices", shell=True) 试试
换个电脑试试吧。。
不用谢
Python 和 adb 环境变量怎么配的?
除了 adb devices 外,adb --version 同样也拿不到返回值,但执行 adb --help 却能拿到
我用的 popen 没毛病
换个 adb 版本试试
初步判断是你的 adb 没有加到环境变量,或者你把 adb 放在你工程目录下。以下是我测试的结果,本机没装 adb。
os.popen('adb devices').readlines()
[]
import subprocess
temp = subprocess.check_output("adb devices",stderr=subprocess.STDOUT,shell=True)
print(temp)
b'List of devices attached \r\nHJWV1BRDBM\tdevice\r\n\r\n'
如图所示即可
此贴终结:
这个问题困扰了我好久,也翻墙到了 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,右键属性 - 先是 - 勾选'完全控制',加了所有的权限,再运行扔不起作用,
后来看到里面有个兼容性,我就是试着勾选上在运行~~神奇的事情发生了!!!竟然就可以了!
原因仍就没找到~~~,大神们有兴趣可以研究一下
曾经遇到过偶尔没有输出的问题,用 ['cmd', '/c', '<command>']
正常了
这个问题请问遇到过么