[GRASS-user] Re: Using temp files in Grass Script
Glynn Clements
glynn at gclements.plus.com
Tue May 17 08:11:41 EDT 2011
Johannes Radinger wrote:
> I found that thread about temporary maps...
>
> e.g in my case in my python script i use:
>
> #Convert river from vector to raster format
> grass.run_command("v.to.rast",
> input = "river_gen",
> overwrite = True,
> output = "river_raster",
> use = "val",
> value = res)
>
> #Thinning the rastarized river
> grass.run_command("r.thin",
> input = "river_raster",
> overwrite = True,
> output = "river_raster_thin")
>
> and here is the map river_raster only temporary for the thinning
> process and the river_raster_thin is used for further calculations.
> At the moment I have a g.remove to remove the river raster after
> the thinning process but should I handle that with temporary files/maps
> and if yes how is that exactly done in my python script?
1. In general, you should make an attempt at ensuring that temporary
map names won't conflict with any existing map name. The usual
approach is to include both ".tmp" and the PID in the map name, e.g.:
import os
...
global tmpmap
tmp_map = 'river_raster.tmp.%d' % os.getpid()
2. Deletion should ideally be handled using an exit handler, e.g.:
import os
import atexit
import grass.script as grass
tmp_map = None
def cleanup():
if tmp_map:
grass.run_command('g.remove', rast = tmp_map, quiet = True)
def main():
global tmpmap
tmp_map = 'river_raster.tmp.%d' % os.getpid()
...
if __name__ == "__main__":
options, flags = grass.parser()
atexit.register(cleanup)
main()
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).
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-user
mailing list