Νίκος Αλεξανδρής wrote:
> >  How is merging/ calling the several scripts in/ from within just one
> > script done best? What strategy is best? I really have trouble to get
> > this done. 

On Sun, 2009-11-08 at 08:19 +0000, Glynn Clements wrote:
> It's hard to say without understanding likely workflows.
> 
> However, if you want to make most of the code into Python modules, one
> suggestion is to have the body of the script (the code in the
> "if __name__ == '__main__':" block) read the various fields from the
> "options" and "flags" variables and pass them to the functions as
> parameters, rather than having the functions read global variables
> (Python doesn't actually have global variables; "global" variables are
> local to a module).

OK.


> BTW, this is wrong:
> 
>             flags = "-o",\
> 
> It happens to work at present, but the correct method to pass the
> "--o" flag is to use "overwrite = True" (analogous to "quiet = True"
> for the "--q" flag and "verbose = True" for the "--v" flag).

OK, thanks! Maybe this can/ should be added in the wiki(?).


> If you want to enable these flags throughout the script, you can use:
> 
>       os.environ['GRASS_OVERWRITE'] = '1'     # --o
>       os.environ['GRASS_VERBOSE'] = '0'       # --q
>       os.environ['GRASS_VERBOSE'] = '3'       # --v
> 
> In general, it's best to leave these settings to the user.

Sometimes it is required to use them and prevent the user from _not_
using e.g. the "--o" flag (I think... ?).


> If the user
> runs the script with --o, --q, and/or --v, the corresponding
> environment variables will be set by grass.parser(). If the user has
> those variables set in their environment, the values will be inherited
> by the script.
> 
> If you want to examine the settings use the overwrite() and/or
> verbosity() functions in grass.script.

# note-to-self:
# check functions overwrite(), verbosity() in grass.script


> Also, for writing log messages, string.Template is preferable when
> there are multiple substitutions. E.g. rather than:
> 
>       print """\n     + Vector grid of size %d rows x %d ( %s cells) columns 
> created"""\
>       % (rows, cols, cells)
> 
> using:
>       print string.Template(
>               """\n     + Vector grid of size ${rows} rows x ${cols} 
> (${cells} cells) columns created"""
>               ).substitute(rows = rows, cols = cols, cells = cells)
> 
> makes it easier to correlate the fields with the values. It also makes
> it easier to localise the message, as the fields can be re-ordered if
> needed.


That is (very) true. Cool!

> If you do a lot of this, consider a utility function, e.g.:
> 
>       def log(msg, **kwargs):
>               grass.message(string.Template(msg).substitute(**kwargs))

This is supposed to reduce typing effort, right?

> I'm wondering whether grass.message() etc should be extended in this
> manner.

Thank you for your time Glynn, Nikos

_______________________________________________
grass-user mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to