Index: tools/skpbench/_adb.py |
diff --git a/tools/skpbench/_adb.py b/tools/skpbench/_adb.py |
index 402e132a2b9fd7afff02099a081347e1ea491975..75c0173034a0d4d5d5eb0f605f0dc8407b753646 100644 |
--- a/tools/skpbench/_adb.py |
+++ b/tools/skpbench/_adb.py |
@@ -3,40 +3,50 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+from __future__ import print_function |
import re |
import subprocess |
import sys |
class Adb: |
- def __init__(self, device_serial=None): |
+ def __init__(self, device_serial=None, echofile=None): |
self.__invocation = ['adb'] |
if device_serial: |
self.__invocation.extend(['-s', device_serial]) |
+ self.__echofile = echofile |
+ self.__is_root = None |
def shell(self, cmd): |
+ if self.__echofile: |
+ self.__echo_cmd(cmd) |
subprocess.call(self.__invocation + ['shell', cmd], stdout=sys.stderr) |
def check(self, cmd): |
+ if self.__echofile: |
+ self.__echo_cmd(cmd) |
result = subprocess.check_output(self.__invocation + ['shell', cmd]) |
- return result.rstrip() |
- |
- def check_lines(self, cmd): |
- result = self.check(cmd) |
- return re.split('[\r\n]+', result) |
- |
- def get_device_model(self): |
- result = self.check('getprop | grep ro.product.model') |
- result = re.match(r'\[ro.product.model\]:\s*\[(.*)\]', result) |
- return result.group(1) if result else 'unknown_product' |
+ if self.__echofile: |
+ print(result, file=self.__echofile) |
+ return result |
+ |
+ def root(self): |
+ if not self.is_root(): |
+ subprocess.call(self.__invocation + ['root'], stdout=sys.stderr) |
+ self.__is_root = None |
+ return self.is_root() |
def is_root(self): |
- return self.check('whoami') == 'root' |
- |
- def attempt_root(self): |
- if self.is_root(): |
- return True |
- subprocess.call(self.__invocation + ['root'], stdout=sys.stderr) |
- return self.is_root() |
+ if self.__is_root is None: |
+ self.__is_root = ('root' == self.check('whoami').strip()) |
+ return self.__is_root |
def remount(self): |
subprocess.call(self.__invocation + ['remount'], stdout=sys.stderr) |
+ |
+ def __echo_cmd(self, cmd): |
+ escaped = [re.sub(r'([^a-zA-Z0-9])', r'\\\1', x) |
+ for x in cmd.strip().splitlines()] |
+ subprocess.call(self.__invocation + \ |
+ ['shell', 'echo', '$(whoami)@$(getprop ro.serialno)$', |
+ " '\n>' ".join(escaped)], |
+ stdout=self.__echofile) |