[GRASS-user] Definintion of cleanup in pyhton script

Hi GRASS users,

maybe someone can help me with the cleanup process in a
GRASS python script I am writing. The script uses the
gparser functionality to get the needed files etc via
the GUI.

I also try to include a proper cleanup process within
the script which deletes all the tmp maps created. This
should also work if the script stops (e.g due to an error).
So I think I FIRST need to define all the files which
should be removed. The problem is that my script includes
a while loop (iteration) so I can't really say which
files will be created in advance. How can I define a proper
cleanup in such cases?

The script looks at the moment like:

#!/usr/bin/env python
...
import grass.script as grass

tmp_rast = None
tmp_vect = None

def cleanup():
  if (tmp_rast):
    grass.run_command("g.remove",
        rast = tmp_map_rast,
        quiet = True)

def main():

  max_count = 5 # maximum number of iterations

  #global variables for cleanup - standard values
  global tmp_rast
  tmp_rast = [f + str(os.getpid()) for f in
    (["r%d_tmp_" % x for x in range(max_count+1)]+
    ["rt%d_tmp_" % x for x in range(max_count+1)]+
    ["r_diff%d_tmp_" % x for x in range(max_count+1)])]

  ...
  diff = 9999
  while (diff is not None):
  #In this while loop all the tmp-files are created
  ...

if __name__ == "__main__":
  options, flags = grass.parser()
  atexit.register(cleanup)
  sys.exit(main())

How can I improve this? Maybe someone of you is more experienced than I am.
Thank you so much!

Best regards,
Johannes

--
NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!
Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a

Johannes Radinger wrote:

maybe someone can help me with the cleanup process in a
GRASS python script I am writing. The script uses the
gparser functionality to get the needed files etc via
the GUI.

I also try to include a proper cleanup process within
the script which deletes all the tmp maps created. This
should also work if the script stops (e.g due to an error).
So I think I FIRST need to define all the files which
should be removed. The problem is that my script includes
a while loop (iteration) so I can't really say which
files will be created in advance. How can I define a proper
cleanup in such cases?

Define a list of map names which starts out empty and has names
appended to it as the names are generated.

E.g.:

  tmp_rast =
  
  def cleanup():
      for rast in tmp_rast:
          grass.run_command("g.remove",
                            rast = rast,
                            quiet = True)
  
  def main():
      ...
      while ...:
          next_rast = ...
          tmp_rast.append(next_rast)
          ...

  if __name__ == "__main__":
      options, flags = grass.parser()
      atexit.register(cleanup)
      sys.exit(main())

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