From 8de24b56019e90cf3881a9876442473d5b267a08 Mon Sep 17 00:00:00 2001 From: Sebastian Goscik Date: Wed, 23 Mar 2016 15:10:26 +0000 Subject: [PATCH] AdbConnection: added automatic detection of new line separators --- devlib/utils/android.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/devlib/utils/android.py b/devlib/utils/android.py index 8328b22..c2fed96 100644 --- a/devlib/utils/android.py +++ b/devlib/utils/android.py @@ -26,8 +26,8 @@ import logging import re from collections import defaultdict -from devlib.exception import TargetError, HostError -from devlib.utils.misc import check_output, which +from devlib.exception import TargetError, HostError, DevlibError +from devlib.utils.misc import check_output, which, memoized from devlib.utils.misc import escape_single_quotes, escape_double_quotes @@ -157,6 +157,17 @@ class AdbConnection(object): def name(self): return self.device + @property + @memoized + def newline_separator(self): + output = adb_command(self.device, "shell '(ls); echo \"\n$?\"'") + if output.endswith('\r\n'): + return '\r\n' + elif output.endswith('\n'): + return '\n' + else: + raise DevlibError("Unknown line ending") + def __init__(self, device=None, timeout=10): self.timeout = timeout if device is None: @@ -308,9 +319,9 @@ def adb_shell(device, command, timeout=None, check_exit_code=False, as_root=Fals raw_output, error = check_output(actual_command, timeout, shell=True) if raw_output: try: - output, exit_code, _ = raw_output.rsplit('\r\n', 2) + output, exit_code, _ = raw_output.rsplit(self.newline_separator, 2) except ValueError: - exit_code, _ = raw_output.rsplit('\r\n', 1) + exit_code, _ = raw_output.rsplit(self.newline_separator, 1) output = '' else: # raw_output is empty exit_code = '969696' # just because