summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Noel <GregNoel@tigris.org>2008-11-09 02:02:04 (GMT)
committerGreg Noel <GregNoel@tigris.org>2008-11-09 02:02:04 (GMT)
commitcbce8f24f4e240f70a00d761c45a168d2d974a60 (patch)
treedab005d5c78a9aa66ad09541076ae8d723c3463e
parent6d318b82077404a03e2bc2d1f4f069bdcabd0579 (diff)
downloadSCons-cbce8f24f4e240f70a00d761c45a168d2d974a60.zip
SCons-cbce8f24f4e240f70a00d761c45a168d2d974a60.tar.gz
SCons-cbce8f24f4e240f70a00d761c45a168d2d974a60.tar.bz2
Issue 2228: discard stderr by using os.devnull
-rw-r--r--src/engine/SCons/Action.py16
-rw-r--r--src/engine/SCons/Environment.py3
-rw-r--r--src/engine/SCons/Tool/g++.py3
-rw-r--r--src/engine/SCons/Tool/gcc.py3
4 files changed, 18 insertions, 7 deletions
diff --git a/src/engine/SCons/Action.py b/src/engine/SCons/Action.py
index 70fafe0..6ce5116 100644
--- a/src/engine/SCons/Action.py
+++ b/src/engine/SCons/Action.py
@@ -102,7 +102,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import cPickle
import dis
import os
-import os.path
import string
import sys
import subprocess
@@ -579,8 +578,17 @@ def get_default_ENV(env):
# it'll have to be tweaked to get the full desired functionality.
# one special arg (so far?), 'error', to tell what to do with exceptions.
def _subproc(env, cmd, error = 'ignore', **kw):
- """Do setup for a subprocess.Popen() call"""
- ### TODO: allow std{in,out,err} to be "'devnull'" (see issue 2228)
+ """Do common setup for a subprocess.Popen() call"""
+ # allow std{in,out,err} to be "'devnull'"
+ io = kw.get('stdin')
+ if is_String(io) and io == 'devnull':
+ kw['stdin'] = open(os.devnull)
+ io = kw.get('stdout')
+ if is_String(io) and io == 'devnull':
+ kw['stdout'] = open(os.devnull, 'w')
+ io = kw.get('stderr')
+ if is_String(io) and io == 'devnull':
+ kw['stderr'] = open(os.devnull, 'w')
# Figure out what shell environment to use
ENV = kw.get('env', None)
@@ -971,7 +979,7 @@ class FunctionAction(_ActionAction):
# probably be best to always return them by value here, but
# some codes do not check the return value of Actions and I do
# not have the time to modify them at this point.
- if (exc_info[1] and
+ if (exc_info[1] and
not isinstance(exc_info[1],EnvironmentError)):
raise result
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 5ac10ac..327e0d1 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -527,7 +527,8 @@ class SubstitutionEnvironment:
def backtick(self, command):
import subprocess
# common arguments
- kw = { 'stdout' : subprocess.PIPE,
+ kw = { 'stdin' : 'devnull',
+ 'stdout' : subprocess.PIPE,
'stderr' : subprocess.PIPE,
'universal_newlines' : True,
}
diff --git a/src/engine/SCons/Tool/g++.py b/src/engine/SCons/Tool/g++.py
index 61d095e..b492604 100644
--- a/src/engine/SCons/Tool/g++.py
+++ b/src/engine/SCons/Tool/g++.py
@@ -65,7 +65,8 @@ def generate(env):
if env['CXX']:
#pipe = SCons.Action._subproc(env, [env['CXX'], '-dumpversion'],
pipe = SCons.Action._subproc(env, [env['CXX'], '--version'],
- stderr = subprocess.PIPE,
+ stdin = 'devnull',
+ stderr = 'devnull',
stdout = subprocess.PIPE)
if pipe.wait() != 0: return
# -dumpversion was added in GCC 3.0. As long as we're supporting
diff --git a/src/engine/SCons/Tool/gcc.py b/src/engine/SCons/Tool/gcc.py
index 7d2b1b8..d074191 100644
--- a/src/engine/SCons/Tool/gcc.py
+++ b/src/engine/SCons/Tool/gcc.py
@@ -55,7 +55,8 @@ def generate(env):
if env['CC']:
#pipe = SCons.Action._subproc(env, [env['CC'], '-dumpversion'],
pipe = SCons.Action._subproc(env, [env['CC'], '--version'],
- stderr = subprocess.PIPE,
+ stdin = 'devnull',
+ stderr = 'devnull',
stdout = subprocess.PIPE)
if pipe.wait() != 0: return
# -dumpversion was added in GCC 3.0. As long as we're supporting