subprocess.run('adb start-server') 执行是 卡住
时间: 2024-01-30 18:02:37 浏览: 219
`subprocess.run('adb start-server')` 命令会启动 Android Debug Bridge (ADB) 服务器。如果该命令卡住了,可能是因为 ADB 服务器无法正常启动或者运行。有几种可能的原因和解决方法:
1. 确认 ADB 已正确安装并配置好环境变量。可以在终端里输入 `adb version` 查看 ADB 版本,如果提示找不到命令,则需要安装和配置 ADB。
2. 确认设备已正确连接并启用开发者模式。可以在终端里输入 `adb devices` 查看设备是否被识别。
3. 尝试在命令后面加上 `stdout=subprocess.PIPE, stderr=subprocess.PIPE` 参数,这样可以捕获命令的输出信息,从而更好地定位问题。
4. 如果仍然无法解决问题,可以尝试重启设备和计算机,或者卸载并重新安装 ADB。
相关问题
result = subprocess.run('adb start-server', stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout 一直没有返回
如果加上了 `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)
```
import subprocess def turn_on_bluetooth(): subprocess.run(['adb', 'shell', 'am', 'start', '-a', 'android.bluetooth.adapter.action.REQUEST_ENABLE']) def turn_off_bluetooth(): subprocess.run(['adb', 'shell', 'am', 'start', '-a', 'android.bluetooth.adapter.action.REQUEST_DISABLE']) # 调用函数来开关蓝牙 turn_on_bluetooth() turn_off_bluetooth() 解释这段python代码
这段 Python 代码使用了 `subprocess` 模块来调用命令行命令来开关蓝牙。具体来说,它定义了两个函数 `turn_on_bluetooth()` 和 `turn_off_bluetooth()`,分别用于打开和关闭蓝牙。
在这些函数中,`subprocess.run()` 函数被用来执行命令行命令。它接受一个列表参数,列表中的每个元素都是命令的一部分。在这里,它执行了 `adb shell am start -a` 命令,并传递了相应的参数来请求打开或关闭蓝牙。具体而言,`android.bluetooth.adapter.action.REQUEST_ENABLE` 参数用于请求打开蓝牙,而 `android.bluetooth.adapter.action.REQUEST_DISABLE` 参数用于请求关闭蓝牙。
因此,当调用 `turn_on_bluetooth()` 函数时,它将执行 `adb shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE` 命令来打开蓝牙;当调用 `turn_off_bluetooth()` 函数时,它将执行 `adb shell am start -a android.bluetooth.adapter.action.REQUEST_DISABLE` 命令来关闭蓝牙。
阅读全文