[Scons-users] Getting the result of an action?

Vasily vasslitvinov at pisem.net
Thu Sep 25 17:12:32 EDT 2014


Beware that check_output is available since 2.7 only.

Thanks,
Vasily
25 сент. 2014 г. 23:16 пользователь "Russell E. Owen" <rowen at uw.edu>
написал:

> Thank you both for your helpful answers.
>
> For the record, this works (thanks to Jim Bosch for pointing me to the
> source code for TryAction):
>         result = context.TryAction(SCons.Script.Action(r"$CC --version >
> $TARGET"))
>         ccVersDumpOK, ccVersDump = result[0:2]
>         if ccVersDumpOK:
>             ....
>
> I'm glad to know that subprocess works. I'll probably stick to
> TryAction, now that I have it running.
>
> By the way, subprocess.Popen can be shortened with convenience function
> check_output:
>     try:
>         output = subprocess.check_output((gcc_path, "--version"))
>         ....
>     except Exception: # or catch subprocess.CalledProcessError to get
> more info about the failure
>         raise Exception("No GCC at...
>
>
> -- Russell
>
> In article
> <B5DA56DED4F17E4499165B4F45BF14DFE31C5CAB at IRVEX007.corp.blizzard.net>,
>  Brian Fitzgerald via Scons-users <scons-users at scons.org> wrote:
>
> > The comment from Gary is how we do it in our build - we need to know the
> > exact version of GCC, so we run this as part of the build setup:
> >
> > def GccVersion(env, gcc_path):
> >   # Get its version
> >   output, error = subprocess.Popen(
> >       args="%s --version" % gcc_path, stdin=subprocess.PIPE,
> >       stdout=subprocess.PIPE, stderr=subprocess.PIPE,
> >       shell=True).communicate()
> >   if len(output) == 0:
> >     raise Exception("No GCC at %s" % gcc_path)
> >
> >   env['BNET_GCC_VERSION_FULL'] = (output.splitlines())[0]
> >   match = re.search('^\S+\s+\(GCC\)\s+(\S\S\S).+$',
> >   env['BNET_GCC_VERSION_FULL'])
> >   if not match:
> >    raise Exception("Could not parse GCC version from %s" % output)
> >
> >   env['BNET_GCC_VERSION'] = match.group(1)
> >
> > Ignore all the parts custom to us. We have some parts of the build
> > conditional on GCC version, so we need to be able to feed it to the rest
> of
> > the system, not just the C++ compile. It's a little gross, but it's
> wrapped
> > in a function so the rest of the code just sees something clean ?
> >
> > From: Scons-users [mailto:scons-users-bounces at scons.org] On Behalf Of
> Gary
> > Oberbrunner
> > Sent: Thursday, September 25, 2014 9:24 AM
> > To: SCons users mailing list
> > Subject: Re: [Scons-users] Getting the result of an action?
> >
> >
> >
> > On Thu, Sep 25, 2014 at 11:21 AM, Russell E. Owen
> > <rowen at uw.edu<mailto:rowen at uw.edu>> wrote:
> > As part of configuring some environment variables in an SConstruct file
> > I want to run the command
> >
> > $CC --version
> >
> > and parse the output (or raise an exception if it fails). Is there
> > something like SCons.Script.Action(action) that I can use? That
> > particular command seems to only return the exit code, which isn't what
> > I need in this case.
> >
> > Alternatively, is it safe to use the subprocess module for this?
> >
> > Yes, and yes. :-)  You can use a Configure context to do this, analogous
> to
> > how GNU Autoconf would work.  That's the fancy way. But for simple things
> > it's often simpler just to use subprocess and parse the output.  A
> SConstruct
> > is just a python script.
> >
> > --
> > Gary
> > ---------------------------------------------------------------------
> > _______________________________________________
> > Scons-users mailing list
> > Scons-users at scons.org
> > https://pairlist4.pair.net/mailman/listinfo/scons-users
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20140926/de774439/attachment.html>


More information about the Scons-users mailing list