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

Unified Diff: subprocess2.py

Issue 6706022: Update docstrings and add VOID support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/local_rietveld.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: subprocess2.py
diff --git a/subprocess2.py b/subprocess2.py
index c6ff24f6b2505483a449e9dbbb65515a68db1f3f..c9057ac6ae19dd32c996b6c333bd5cc071a21d84 100644
--- a/subprocess2.py
+++ b/subprocess2.py
@@ -19,6 +19,9 @@ import threading
# Constants forwarded from subprocess.
PIPE = subprocess.PIPE
STDOUT = subprocess.STDOUT
+# Sends stdout or stderr to os.devnull.
+VOID = '/dev/null'
+
# Globals.
# Set to True if you somehow need to disable this hack.
@@ -123,13 +126,15 @@ def get_english_env(env):
def Popen(args, **kwargs):
"""Wraps subprocess.Popen().
- Forces English output since it's easier to parse the stdout if it is always in
- English.
+ Returns a subprocess.Popen object.
- Sets shell=True on windows by default. You can override this by forcing shell
- parameter to a value.
+ - Forces English output since it's easier to parse the stdout if it is always
+ in English.
+ - Sets shell=True on windows by default. You can override this by forcing
+ shell parameter to a value.
+ - Adds support for VOID to not buffer when not needed.
- Popen() can throw OSError when cwd or args[0] doesn't exist.
+ Note: Popen() can throw OSError when cwd or args[0] doesn't exist.
"""
# Make sure we hack subprocess if necessary.
hack_subprocess()
@@ -149,17 +154,22 @@ def Popen(args, **kwargs):
if kwargs.get('cwd', None):
tmp_str += '; cwd=%s' % kwargs['cwd']
logging.debug(tmp_str)
+
+ # Replaces VOID with handle to /dev/null.
+ if kwargs.get('stdout') in (VOID, os.devnull):
+ kwargs['stdout'] = open(os.devnull, 'w')
+ if kwargs.get('stderr') in (VOID, os.devnull):
+ kwargs['stderr'] = open(os.devnull, 'w')
return subprocess.Popen(args, **kwargs)
def call(args, timeout=None, **kwargs):
"""Wraps subprocess.Popen().communicate().
- The process will be kill with error code -9 after |timeout| seconds if set.
-
- Automatically passes stdin content as input so do not specify stdin=PIPE.
+ Returns ((stdout, stderr), returncode).
- Returns both communicate() tuple and return code wrapped in a tuple.
+ - The process will be kill with error code -9 after |timeout| seconds if set.
+ - Automatically passes stdin content as input so do not specify stdin=PIPE.
"""
stdin = kwargs.pop('stdin', None)
if stdin is not None:
@@ -204,13 +214,9 @@ def call(args, timeout=None, **kwargs):
def check_call(args, **kwargs):
- """Similar to subprocess.check_call() but use call() instead.
+ """Improved version of subprocess.check_call().
- This permits to include more details in CalledProcessError().
-
- Runs a command and throws an exception if the command failed.
-
- Returns communicate() tuple.
+ Returns (stdout, stderr), unlike subprocess.check_call().
"""
out, returncode = call(args, **kwargs)
if returncode:
@@ -222,9 +228,10 @@ def check_call(args, **kwargs):
def capture(args, **kwargs):
"""Captures stdout of a process call and returns it.
- Similar to check_output() excepts that it discards return code.
+ Returns stdout.
- Discards communicate()[1]. By default sets stderr=STDOUT.
+ - Discards returncode.
+ - Discards stderr. By default sets stderr=STDOUT.
"""
if kwargs.get('stderr') is None:
kwargs['stderr'] = STDOUT
@@ -234,11 +241,11 @@ def capture(args, **kwargs):
def check_output(args, **kwargs):
"""Captures stdout of a process call and returns it.
- Discards communicate()[1]. By default sets stderr=STDOUT.
-
- Throws if return code is not 0.
+ Returns stdout.
- Works even prior to python 2.7.
+ - Discards stderr. By default sets stderr=STDOUT.
+ - Throws if return code is not 0.
+ - Works even prior to python 2.7.
"""
if kwargs.get('stderr') is None:
kwargs['stderr'] = STDOUT
« no previous file with comments | « no previous file | tests/local_rietveld.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698