result = subprocess.run('adb start-server', stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout 一直没有返回
时间: 2024-03-21 22:38:59 浏览: 74
adb server didn't ack解决办法
如果加上了 `stdout=subprocess.PIPE` 参数,`subprocess.run()` 命令就会将命令的标准输出信息重定向到一个管道中,并且阻塞等待命令执行完成。如果命令一直没有返回,可能是因为命令一直在等待某些条件满足,但是这些条件无法满足,导致命令一直阻塞。
比如,在启动 ADB 服务器之前,你需要确认设备已正确连接并启用开发者模式。如果设备没有启用开发者模式,或者没有授权计算机进行调试,ADB 服务器就无法连接设备,而命令就会一直阻塞等待。
你可以尝试加上 `timeout` 参数,设置命令的超时时间,比如 `timeout=10` 表示等待命令执行完成的最长时间为 10 秒。如果命令在超时时间内没有返回,`subprocess.run()` 命令会抛出 `TimeoutExpired` 异常。你可以在捕获异常后进行相应的处理,比如输出错误信息或者尝试重启设备和计算机。下面是一个示例代码:
```python
import subprocess
try:
result = subprocess.run('adb start-server', stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=10)
output = result.stdout.decode('utf-8')
print(output)
except subprocess.TimeoutExpired:
print('Command timed out')
except Exception as e:
print('Error:', e)
```
阅读全文