我想向连接的Android设备发送adb
命令,
例如,我想重启所有连接的设备。
现在我正在使用批处理文件:
@echo off
for /f %%i in ('adb devices^|findstr /e "device"') do (
if "%1" == "shell" (
start cmd /k adb -s %%i %*
) else (
adb -s %%i reboot
)
)
,然后在Python GUI应用程序中。我称它为:
subprocess.call('adb_reboot.bat')
有什么方法可以用Python编写以避免调用bat文件吗?
我不想使用Google pyadb 。
答案 0 :(得分:0)
import subprocess, sys
from subprocess import PIPE
# Get devices from adb.
proc = subprocess.Popen('adb devices | findstr /e "device"', shell=True, stdout=PIPE, universal_newlines=True)
stdout = proc.communicate()[0].strip()
# Get device ids without the word device and append to devices list.
devices = []
for line in stdout.splitlines():
for item in line.split():
if item != 'device':
devices.append(item)
# Exit if no devices.
if not devices:
exit('No devices found.')
# loop through each device in the devices list.
for device in devices:
if len(sys.argv) > 1 and sys.argv[1] == 'shell':
subprocess.Popen(['start', 'cmd', '/k', 'adb', '-s', device] + sys.argv[1:], shell=True)
else:
subprocess.Popen(['adb', '-s', device, 'reboot'])
尝试一下。我没有adb
可以测试,尽管它可以正常工作。
如果adb
在 stderr 而不是 stdout 上输出,则也许可以将stdout=PIPE
更改为stderr=PIPE
。
查看replacing shell pipeline关于将一个命令传递给另一个命令。