[GRASS-user] Re: Using temp files in Grass Script

Glynn Clements glynn at gclements.plus.com
Thu May 19 02:11:47 EDT 2011


Johannes Radinger wrote:

> > Using an exit handler ensures that the temporary map gets removed
> > regardless of how the script terminates (e.g. if it terminates due to
> > an exception).
> 
> Thank you for your nice examples how to do that with tmp files and the exit handler.
> 
> Just some questions:
> 
> 1) is the PID also used on windows systems? so can it be integrated
> in a script which also windows users want to use?

Yes.

> Is it correct that the PID is the same value for running the whole
> script one time?

Yes.

> 2) what exactly does the "global tmpmap"?

First, it should have been "global tmp_map", not "global tmpmap".

"global" declares a variable as global, so that any assignment to that
variable within the function modifies the global variable rather than
creating a local variable with that name.

In order to assign a global variable from within a function, it must
be explicitly declared "global". A "global" statement isn't required
to read a global variable.

In this case, tmp_map must be global so that the name generated within
main() can be used from within cleanup().

> 3)I've got a lot of tmp-files which will be created during the
> process, so is there and option to tell the g.remove that all maps
> containing .tmp.%d' % os.getpid() in the end should be removed
> instead of typing all the tmp map files into the list of g.remove.

You could use g.mremove to remove multiple maps based upon a pattern,
but I would recommend specifying all of the temporary maps explicitly. 

If an option for a GRASS command accepts multiple values (e.g. all of
g.remove's options), you can pass a Python list via
grass.run_command(), e.g..

	grass.run_command('g.remove', rast = [tmp1, tmp2, tmp3])

> 4) so the whole thing works that in the end all the tmp maps are
> deleted after the processing of the script and after an exception
> etc.

An exit handler registered using atexit.register() will be run when
the script terminates, whether due to reaching the end of the script,
calling sys.exit(), an uncaught exception, Ctrl-C/Ctrl-Z, etc.

The only situation where it won't be run is if the Python interpreter
crashes (or is terminated with SIGKILL on Unix, etc), which can't
realistically be handled by any means.

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the grass-user mailing list