[Scons-dev] Fwd: [GSoC Mentors Announce] Now Accepting Applications for Mentoring Organizations for GSoC 2014
Alexandre Feblot
alexandre at feblot.fr
Thu Feb 13 12:14:07 EST 2014
Not sure exactly about what you fixed, but as you speak about coloring, I
wanted to share the colorizer tool I am using. Compared to what was
proposed in the wiki, it allows to colorize everything in stdout and/or
stderr, being printed either by scons itself or by external commands
spawned by scons. In order to do this, indeed, I had to overwrite the spawn
method. Works only on unix, I used basic terminal color codes.
import sys
import os
import re
import select
import subprocess
import platform
c_underline = "\033[04m"
c_blink = "\033[05m"
c_norm = "\033[00m"
# Normal
c_black = "\033[30m"
c_red = "\033[31m"
c_green = "\033[32m"
c_yellow = "\033[33m"
c_blue = "\033[34m"
c_purple = "\033[35m"
c_cyan = "\033[36m"
c_white = "\033[37m"
# Bold
cb_black = "\033[1;30m"
cb_red = "\033[1;31m"
cb_green = "\033[1;32m"
cb_yellow = "\033[1;33m"
cb_blue = "\033[1;34m"
cb_purple = "\033[1;35m"
cb_cyan = "\033[1;36m"
cb_white = "\033[1;37m"
# BackGround
cback_blue = "\033[1;44m"
cback_white = "\033[1;47m"
cback_black = "\033[1;45m"
#------------------------------------------------------------------------------
# regexps and what they will be replaced with
#------------------------------------------------------------------------------
colorPatterns = [
(re.compile(r'(.*: [Ww]arning[:,].*)') ,
r'%s[Warning] %s\1%s' % (cb_red, cb_yellow, c_norm)),
(re.compile(r'(.*: [Ee]rror[:,].*)') ,
r'%s[Error] \1%s' % (cb_red, c_norm)),
(re.compile(r'\[(CC|CXX|UIC|MOC|Q2K|RCC|RAN|LNK)\](.*?)([^/]+)$') ,
r'%s[\1]%s\2%s\3%s' % (c_blue, c_purple, cb_purple, c_norm)),
]
#------------------------------------------------------------------------------
# Colorize a line according to defined patterns
#------------------------------------------------------------------------------
def colorize(line):
for regexp, replacement in colorPatterns:
line = regexp.sub(replacement, line)
return line;
#------------------------------------------------------------------------------
# Allows to hijack default stdout and stderr to colorize them
#------------------------------------------------------------------------------
class Colorizer(object):
def __init__(self, redirected):
self.buf = ''
self.redirected = redirected
def isatty(self):
return self.redirected.isatty()
def write(self, msg):
if self.buf:
msg = self.buf + msg
self.buf = ''
line, sep, msg = msg.partition('\n')
while sep:
self.redirected.write(colorize(line)+'\n')
line, sep, msg = msg.partition('\n')
if line:
self.buf = line
def __del__(self):
if self.buf:
self.redirected.write(colorize(self.buf))
#------------------------------------------------------------------------------
# Asynchroneously stream subprocess stdout/stderr to our own stdout/stderr
#------------------------------------------------------------------------------
def colorizeSpawn(shell, escape, cmd, args, env):
proc = subprocess.Popen(' '.join(args),
stderr=subprocess.PIPE, stdout=subprocess.PIPE,
shell=True, env=env
)
monitoredStreams = [proc.stdout, proc.stderr]
while monitoredStreams:
rsig, wsig, xsig = select.select(monitoredStreams, [], [])
if proc.stdout in rsig:
data = os.read(proc.stdout.fileno(), 1024)
if data:
sys.stdout.write(data)
else:
proc.stdout.close()
monitoredStreams.remove(proc.stdout)
if proc.stderr in rsig:
data = os.read(proc.stderr.fileno(), 1024)
if data:
sys.stderr.write(data)
else:
proc.stderr.close()
monitoredStreams.remove(proc.stderr)
ret = proc.poll()
return ret
#------------------------------------------------------------------------------
# Initialize the colorizer
#------------------------------------------------------------------------------
def generate(env, **kw):
if platform.system() != 'Windows':
if type(sys.stdout) == file and sys.stdout.isatty():
env['SPAWN'] = colorizeSpawn
sys.stdout = Colorizer(sys.stdout)
if type(sys.stderr) == file and sys.stderr.isatty():
env['SPAWN'] = colorizeSpawn
sys.stderr = Colorizer(sys.stderr)
def exists(env):
return 1
2014-02-12 16:25 GMT+01:00 Kenny, Jason L <jason.l.kenny at intel.com>:
> > Fix async subprocess execution with proper handling of std* streams.
>
> So I fixed the issue with output in Parts. I not saying it could not be
> clean up some more. However it solves the output issues, and adds coloring
> ( which seems to need some fixing in certain cases.. ie mac mostly) and
> logging support. It might not be too hard for someone to move the code over
> to SCons and integrated its usage into SCons.
>
>
>
> Just a thought.
>
>
>
> Jason
>
>
>
> *From:* scons-dev-bounces at scons.org [mailto:scons-dev-bounces at scons.org] *On
> Behalf Of *Bill Deegan
> *Sent:* Tuesday, February 11, 2014 5:58 PM
> *To:* SCons developer list
> *Subject:* Re: [Scons-dev] Fwd: [GSoC Mentors Announce] Now Accepting
> Applications for Mentoring Organizations for GSoC 2014
>
>
>
> Anatoly,
>
> While I agree many of the things in your list would be nice to get done.
> I'm not sure most of them are a good thing for a GSOC student to attempt.
>
> Few students would have the time to ramp up on all the info needed and
> make some concrete contributions in the time allowed.
>
> my 2cents.
>
> -Bill
>
>
>
> On Tue, Feb 11, 2014 at 12:35 PM, anatoly techtonik <techtonik at gmail.com>
> wrote:
>
> On Tue, Feb 11, 2014 at 11:30 PM, anatoly techtonik <techtonik at gmail.com>
> wrote:
> > On Mon, Feb 3, 2014 at 10:05 PM, Gary Oberbrunner <garyo at oberbrunner.com>
> wrote:
> >> Hi folks; if we want to get a GSoC project this year, now's the time to
> >> think about it.
> >>
> >> Top of my priority list for a GSoC student would be someone to convert
> >> everything to python3, finishing what we've started already.
> >
> > Can of worms. IMHO.
> >
> >> Other ideas?
> >
> > Concentrate on visualizing and documenting how SCons works. Cleaning
> > up and opening internals to the public. Enhance test running, bring
> > back slaves. List current workflows and tools discovery, research best
> > practices and see how the tool discovery should be improved.
> >
> > Research and document the problem of compiling C programs.
> > Research and document the problem of compiling C++ programs.
> > Enhance documentation.
> > Add more design touches.
> > Integrate best practices from other projects.
> >
> > Fix async subprocess execution with proper handling of std* streams.
>
> Also integrate with https://github.com/facebook/watchman to speed up
> rebuilds (instead of scanning the whole tree again and again).
>
> --
> anatoly t.
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
>
>
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/scons-dev/attachments/20140213/b7b4a05c/attachment.html>
More information about the Scons-dev
mailing list