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

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

Issue 60043003: [android] Add timeout_retry module to pylib/utils/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressed comments Created 7 years, 1 month 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/utils/timeout_retry.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 """A wrapper for subprocess to make calling shell commands easier.""" 5 """A wrapper for subprocess to make calling shell commands easier."""
6 6
7 import os
8 import logging 7 import logging
9 import pipes 8 import pipes
10 import signal 9 import signal
11 import subprocess 10 import subprocess
12 import tempfile 11 import tempfile
13 12
14 import constants 13 from utils import timeout_retry
15 14
16 15
17 def Popen(args, stdout=None, stderr=None, shell=None, cwd=None, env=None): 16 def Popen(args, stdout=None, stderr=None, shell=None, cwd=None, env=None):
18 return subprocess.Popen( 17 return subprocess.Popen(
19 args=args, cwd=cwd, stdout=stdout, stderr=stderr, 18 args=args, cwd=cwd, stdout=stdout, stderr=stderr,
20 shell=shell, close_fds=True, env=env, 19 shell=shell, close_fds=True, env=env,
21 preexec_fn=lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL)) 20 preexec_fn=lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL))
22 21
23 22
24 def Call(args, stdout=None, stderr=None, shell=None, cwd=None, env=None): 23 def Call(args, stdout=None, stderr=None, shell=None, cwd=None, env=None):
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 """Executes a subprocess and returns its exit code and output. 65 """Executes a subprocess and returns its exit code and output.
67 66
68 Args: 67 Args:
69 args: A string or a sequence of program arguments. The program to execute is 68 args: A string or a sequence of program arguments. The program to execute is
70 the string or the first item in the args sequence. 69 the string or the first item in the args sequence.
71 cwd: If not None, the subprocess's current directory will be changed to 70 cwd: If not None, the subprocess's current directory will be changed to
72 |cwd| before it's executed. 71 |cwd| before it's executed.
73 shell: Whether to execute args as a shell command. 72 shell: Whether to execute args as a shell command.
74 73
75 Returns: 74 Returns:
76 The tuple (exit code, output). 75 The 2-tuple (exit code, output).
77 """ 76 """
78 if isinstance(args, basestring): 77 if isinstance(args, basestring):
79 args_repr = args 78 args_repr = args
80 if not shell: 79 if not shell:
81 raise Exception('string args must be run with shell=True') 80 raise Exception('string args must be run with shell=True')
82 elif shell: 81 elif shell:
83 raise Exception('array args must be run with shell=False') 82 raise Exception('array args must be run with shell=False')
84 else: 83 else:
85 args_repr = ' '.join(map(pipes.quote, args)) 84 args_repr = ' '.join(map(pipes.quote, args))
86 85
(...skipping 10 matching lines...) Expand all
97 tmperr.close() 96 tmperr.close()
98 if stderr: 97 if stderr:
99 logging.critical(stderr) 98 logging.critical(stderr)
100 tmpout.seek(0) 99 tmpout.seek(0)
101 stdout = tmpout.read() 100 stdout = tmpout.read()
102 tmpout.close() 101 tmpout.close()
103 if len(stdout) > 4096: 102 if len(stdout) > 4096:
104 logging.debug('Truncated output:') 103 logging.debug('Truncated output:')
105 logging.debug(stdout[:4096]) 104 logging.debug(stdout[:4096])
106 return (exit_code, stdout) 105 return (exit_code, stdout)
106
107
108 def GetCmdStatusAndOutputWithTimeoutAndRetries(args, timeout, retries):
109 """Executes a subprocess with a timeout and retries.
110
111 Args:
112 args: List of arguments to the program, the program to execute is the first
113 element.
114 timeout: the timeout in seconds.
115 retries: the number of retries.
116
117 Returns:
118 The 2-tuple (exit code, output).
119 """
120 return timeout_retry.Run(GetCmdStatusAndOutput, timeout, retries, [args])
OLDNEW
« no previous file with comments | « no previous file | build/android/pylib/utils/timeout_retry.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698