[GRASS-dev] grass.info versus print

Vaclav Petras wenzeslaus at gmail.com
Thu Apr 14 07:20:39 PDT 2016


On Thu, Apr 14, 2016 at 9:55 AM, Paulo van Breugel <p.vanbreugel at gmail.com>
wrote:

> I would have to go through the individual examples but sometimes it might
> be be clear what is a message to inform user about something and what is a
> text output of the module. A rule of thumb can be that modules which output
> maps, (usually) don't do text output, so they shouldn't use print().
>
>
> In this case (r.vif) the output is not a map, but a list of values, i.e.,
> text output (see below). Based on the guidelines, I would assume I should
> use print()?
>

Then print() is the right thing. I would recommend finding a similar module
and see its behavior. For example, r.univar will give you human readable
report and also parseable output (in this case by
grass.script.parse_command()). Both are written to standard output (the
g.message wrappers use standard error output).


>
> All variables
>
> ----------------------------------------
>
> variable                           vif      sqrtvif
>
> 2000_01_precip at climate_1970_2012       2.30     1.52
>
> 2000_03_tempmean at climate_1970_2012    24.95     5.00
>
> 2000_11_precip at climate_1970_2012       3.54     1.88
>
> 2001_02_precip at climate_1970_2012       4.55     2.13
>
> 2001_04_tempmean at climate_1970_2012    25.01     5.00
>
> Variable '2001_04_tempmean at climate_1970_2012' removed
>
> ----------------------------------------
>
> variable                           vif      sqrtvif
>
> 2000_01_precip at climate_1970_2012       2.30     1.52
>
> 2000_03_tempmean at climate_1970_2012     2.19     1.48
>
> 2000_11_precip at climate_1970_2012       3.48     1.87
>
> 2001_02_precip at climate_1970_2012       4.54     2.13
>
> Final selected variables are: 2000_01_precip, 2000_03_tempmean, 2000_11_precip, 2001_02_precip
>
> with as maximum VIF: 5.69787583189
>
>
>
This definitively looks like something from r.report or r.info.


> Perhaps the most important thing is that one should avoid mixing the two,
>> which is something that maybe could go somewhere in the wiki?
>>
>
> Feel free to extent either wiki or guidelines if you think it is not clear
> enough.
>
>
> I wouldn't mind doing so, but I probably should understand better myself
> what exactly the issue is with using both print() and grass.info() in one
> script. Based on what I read in the guidelines, I am not clear whether
> using both is against the guidelines as such,


You can use both in one script. The difference is what you use them for.
For example, a lot of modules will tell which map was created (this is done
through g.message or its C equivalents), while g.region -p will use
standard output. Some cases are unclear, for example v.in.lidar uses
standard output (fprintf(stdout,...)) to tell how many points imported.
G_message() might be more appropriate here because it is an message to the
user while the output is the vector map. If G_message() would be used, this
output could be silenced by --quiet.


> but technically it seems it can cause problems as you explained (and I
> experienced).
>

They are mostly related to syncing of stdout and strerr streams which is
more challenging for the GUI (and may need some fixing there).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20160414/f6035494/attachment-0001.html>


More information about the grass-dev mailing list