Created
May 4, 2017 22:19
-
-
Save stavfx/6b5db7191818ab2b62af130c059bd153 to your computer and use it in GitHub Desktop.
A wrapper over ADB that will handle multiple devices gracefully
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!python.exe | |
import site | |
import subprocess | |
import sys | |
import os | |
DEVICES_START = "List of devices attached" | |
def main(): | |
args = sys.argv[1:] | |
if args: | |
runAdbCommand(args) | |
def runAdbCommand(args): | |
if runDevicelessCommands(args): | |
return | |
devices = getDeviceList() | |
if devices is None: | |
print "couldn't get list of devices" | |
else: | |
count = len(devices) | |
if count == 0: | |
print "no devices attached" | |
elif count == 1: | |
runOnDevice(devices[0], args) | |
else: | |
print "More than one device attached..." | |
for i in range(0, count): | |
print "(%d) %s" % (i + 1, devices[i]) | |
print "(%d) Run on all" % (count + 1) | |
input = raw_input("Choose device: ") | |
while not input.isdigit() or not (0 < int(input) <= count + 1): | |
input = raw_input("No such option, choose again: ") | |
input = int(input) | |
if input > count: | |
runOnAllDevices(devices, args) | |
else: | |
runOnDevice(devices[input - 1], args) | |
def getDeviceList(): | |
out = subprocess.Popen(['adb', 'devices'], stdout=subprocess.PIPE).communicate()[0] | |
if DEVICES_START not in out: | |
return None | |
index = out.index(DEVICES_START) + len(DEVICES_START) + 1 | |
devices = out[index:] | |
devices = devices.split(os.linesep) | |
devices = filter(None, devices) | |
devices = [d[:d.index("\t")] for d in devices] | |
return devices | |
def runOnAllDevices(devices, args): | |
for device in devices: | |
runOnDevice(device, args) | |
def runOnDevice(device, args): | |
command = ['adb', '-s', device] + args | |
print "Running: " + " ".join(command) | |
out = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0] | |
print out | |
def runDevicelessCommands(args): | |
if not args: | |
out = subprocess.Popen(['adb'], stdout=subprocess.PIPE).communicate()[0] | |
print out | |
return True | |
if args[0] == "devices": | |
out = subprocess.Popen(['adb', 'devices'], stdout=subprocess.PIPE).communicate()[0] | |
print out | |
return True | |
return False | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment