[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