Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: build/android/pylib/android_commands.py

Issue 13861026: [Android] Switch all subprocess.Popen calls to use a temporary file instead of PIPE. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | build/android/pylib/cmd_helper.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Provides an interface to communicate with the device via the adb command. 5 """Provides an interface to communicate with the device via the adb command.
6 6
7 Assumes adb binary is currently on system path. 7 Assumes adb binary is currently on system path.
8 """ 8 """
9 9
10 import collections 10 import collections
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 Otherwise commands are sent to all attached devices. 197 Otherwise commands are sent to all attached devices.
198 """ 198 """
199 199
200 def __init__(self, device=None): 200 def __init__(self, device=None):
201 self._adb = adb_interface.AdbInterface() 201 self._adb = adb_interface.AdbInterface()
202 if device: 202 if device:
203 self._adb.SetTargetSerial(device) 203 self._adb.SetTargetSerial(device)
204 self._device = device 204 self._device = device
205 self._logcat = None 205 self._logcat = None
206 self.logcat_process = None 206 self.logcat_process = None
207 self._logcat_tmpoutfile = None
207 self._pushed_files = [] 208 self._pushed_files = []
208 self._device_utc_offset = self.RunShellCommand('date +%z')[0] 209 self._device_utc_offset = self.RunShellCommand('date +%z')[0]
209 self._md5sum_path = '' 210 self._md5sum_path = ''
210 self._external_storage = '' 211 self._external_storage = ''
211 self._util_wrapper = '' 212 self._util_wrapper = ''
212 213
213 def Adb(self): 214 def Adb(self):
214 """Returns our AdbInterface to avoid us wrapping all its methods.""" 215 """Returns our AdbInterface to avoid us wrapping all its methods."""
215 return self._adb 216 return self._adb
216 217
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 StopRecordingLogcat or SearchLogcatRecord following the tests. 949 StopRecordingLogcat or SearchLogcatRecord following the tests.
949 950
950 Args: 951 Args:
951 clear: True if existing log output should be cleared. 952 clear: True if existing log output should be cleared.
952 filters: A list of logcat filters to be used. 953 filters: A list of logcat filters to be used.
953 """ 954 """
954 if clear: 955 if clear:
955 self._adb.SendCommand('logcat -c') 956 self._adb.SendCommand('logcat -c')
956 logcat_command = 'adb %s logcat -v threadtime %s' % (self._adb._target_arg, 957 logcat_command = 'adb %s logcat -v threadtime %s' % (self._adb._target_arg,
957 ' '.join(filters)) 958 ' '.join(filters))
959 self._logcat_tmpoutfile = tempfile.TemporaryFile(bufsize=0)
958 self.logcat_process = subprocess.Popen(logcat_command, shell=True, 960 self.logcat_process = subprocess.Popen(logcat_command, shell=True,
959 stdout=subprocess.PIPE) 961 stdout=self._logcat_tmpoutfile)
960 962
961 def StopRecordingLogcat(self): 963 def StopRecordingLogcat(self):
962 """Stops an existing logcat recording subprocess and returns output. 964 """Stops an existing logcat recording subprocess and returns output.
963 965
964 Returns: 966 Returns:
965 The logcat output as a string or an empty string if logcat was not 967 The logcat output as a string or an empty string if logcat was not
966 being recorded at the time. 968 being recorded at the time.
967 """ 969 """
968 if not self.logcat_process: 970 if not self.logcat_process:
969 return '' 971 return ''
970 # Cannot evaluate directly as 0 is a possible value. 972 # Cannot evaluate directly as 0 is a possible value.
971 # Better to read the self.logcat_process.stdout before killing it, 973 # Better to read the self.logcat_process.stdout before killing it,
972 # Otherwise the communicate may return incomplete output due to pipe break. 974 # Otherwise the communicate may return incomplete output due to pipe break.
973 if self.logcat_process.poll() is None: 975 if self.logcat_process.poll() is None:
974 self.logcat_process.kill() 976 self.logcat_process.kill()
975 (output, _) = self.logcat_process.communicate() 977 self.logcat_process.wait()
976 self.logcat_process = None 978 self.logcat_process = None
979 self._logcat_tmpoutfile.seek(0)
980 output = self._logcat_tmpoutfile.read()
981 self._logcat_tmpoutfile.close()
977 return output 982 return output
978 983
979 def SearchLogcatRecord(self, record, message, thread_id=None, proc_id=None, 984 def SearchLogcatRecord(self, record, message, thread_id=None, proc_id=None,
980 log_level=None, component=None): 985 log_level=None, component=None):
981 """Searches the specified logcat output and returns results. 986 """Searches the specified logcat output and returns results.
982 987
983 This method searches through the logcat output specified by record for a 988 This method searches through the logcat output specified by record for a
984 certain message, narrowing results by matching them against any other 989 certain message, narrowing results by matching them against any other
985 specified criteria. It returns all matching lines as described below. 990 specified criteria. It returns all matching lines as described below.
986 991
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 """ 1273 """
1269 def __init__(self, output): 1274 def __init__(self, output):
1270 self._output = output 1275 self._output = output
1271 1276
1272 def write(self, data): 1277 def write(self, data):
1273 data = data.replace('\r\r\n', '\n') 1278 data = data.replace('\r\r\n', '\n')
1274 self._output.write(data) 1279 self._output.write(data)
1275 1280
1276 def flush(self): 1281 def flush(self):
1277 self._output.flush() 1282 self._output.flush()
OLDNEW
« no previous file with comments | « no previous file | build/android/pylib/cmd_helper.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698