Using Python to automate builds

Dave Angel davea at ieee.org
Tue Aug 4 17:34:23 EDT 2009


Kosta wrote:
> I am a Python newbie, tasked with automating (researching) building
> Windows drivers using the WDK build environment.  I've been looking
> into Python for this (instead of writing a bunch of batch files).
>
> What I would like to do, is to open a cmd window, and start a Python
> script.  This script would then (based upon input arguments), build
> different flavors of the driver (fre, chk, x86, x64) and do some post
> processing (create cat files, sign, etc.).
>
> I was hoping to take advantage as much as possible of exisiting
> infrastructure from the WDK.  I am able to call setenv.bat and provide
> all the input parameters.  One of the things setenv.bat does is change
> the path environment variable.  However, this is not captured by
> Python.  I could duplicate the functionality, but I'd rather not.  Is
> there a way to capture all enviroment variable changes being made by a
> batch file from Python?
>
> Thanks!
>
>   
An excellent question.  It's been a few years, but last time I remember 
looking, setenv.bat only changed environment variables, and didn't 
change current directory, or run any external programs..  If that's 
still true, I figure you have three options.

I don't know of any way to capture them explicitly.  So here are the 
three choices I can come up with:

1) have the first python program invoke a new shell which runs setenv, 
then runs another python program.  This second python program would be 
where all the work is done, invoking compilers, linkers etc.  So the 
first python program invokes a batch file which looks something like:
          call setenv.bat  arg1
          python second.py    arg2 arg3  arg4  arg5

 This batch file could even be generated on the fly, just to simplify 
complex argument passing.

2) Have the python program invoke a batch file something like the 
following, and then analyze the resulting text file
           call setenv.bat   arg1
           set > tempfile.txt

The contents of that tempfile could then be loaded into a dict similar 
to the usual environment.  Now the Python script can continue, and just 
use these environment variable instead of the original set

3) Have the python program parse the setenv.bat instead of running it.

There was a post on this newsgroup announcing pyKook.  It's still in 
early form, but you might get ideas from it.  I haven't looked, I just 
pasted the announcement to look at later.

+ I have released pyKook 0.0.2.
+ http://pypi.python.org/pypi/Kook/0.0.2
+ http://www.kuwata-lab.com/kook/
+ http://www.kuwata-lab.com/kook/pykook-users-guide.html

Other possibilities:
+   http://pypi.python.org/pypi/vellum/       flexible small 'make' 
alternative

+  http://code.google.com/p/waf/

+  http://code.google.com/p/fabricate/

DaveA




More information about the Python-list mailing list