Calling a Shell Script from within Python

William Hudspeth bhudspeth at EDAC.UNM.EDU
Tue Jan 25 10:36:48 EST 2005


Hello,

I have written a Mapserver application in Python Mapscript. In my code,
I use a standard Python function to call a BASH shell script that
processes a GRASS raster file, and then loads the R statistics package
to generate some plots. When I launch the shell script from a much
simpler python module (whose only function is to call the shell script),
it runs flawlessly. In my main Mapserver application, however, I have
tried calling the shell script using two different methods in Python,
one with arguments (e.g. passing some map extents), and another without
arguments (e.g. where I hard code some map extents). They get different
errors, both seeming to involve a problem with starting R. It seems to
be a problem with running processes, but I don't understand how to
correct it:

Call #1 from my Mapserver code involves calling a locally defined
function (derived from the O'Reilly Python Standard Library Book):

        def run(program, *args):
                pid=os.fork()
                if not pid:
                        os.execvp(program, (program, ) + args)
                return os.wait()[0]
        #I then set some values for north, south, east, and west
        run(elevation_density.sh, north, south, east, west)

The error returned:

[Tue Jan 25 15:02:48 2005] [error] [client 129.24.73.222] malformed
header from script. Bad header=Setting GISRC environmental sh:
python_mapscript.py, referer: http://falstaff.unm.edu/cgi-
bin/reason/python_mapscript.py
[Tue Jan 25 15:02:48 2005] [error] [client 129.24.73.222] /usr/local/grass53/scripts/elevation_density.sh: line 75: R: command not found, referer: http://falstaff.unm.edu/cgi-bin/reason/python_mapscript.py

Call#2 from my Mapserver code uses the os.system() function (where I
hard code some extents in the Bash shell script)

        os.system("elevation_density.sh")

The error returned is basically the same as above.

Again, a simple python module with one of the two function calls above
works just fine. It is only when I make the calls from within my larger
block of Mapserver Python code that I get errors.

Any help would be greatly appreciated.

Bill



More information about the mapserver-users mailing list