[GRASS5] stdout and stderr

Paul Kelly paul-grass at stjohnspoint.co.uk
Sun Oct 17 09:04:05 EDT 2004


Hello developers
I was just wondering about the appropriateness of writing different types 
of module output to stderr or stdout, as I notice there has been some 
activity in 5.7 in this area recently. I am wondering if perhaps I have 
been wrong about how this should be used before:

When writing new code and fixing bugs I have tended to ensure that only 
output which is the actual result of a GIS processing operation that needs 
to be displayed to the user (rather than written to a file in the GRASS 
database) should be written to stdout. All other errors, warnings, 
informative progress messages and copyright notices etc. are written to 
stderr.

I'll use the example of re-directing output to a file to show why this 
makes logical sense to me.
g.proj -wf proj4=+init=epsg:29900 > irishgrid.prj
The point of this command is to convert the projection description 
described by '+init=epsg:29900' in PROJ.4 format into WKT format and store 
it in a .prj file. The WKT output is printed to stdout and stdout 
re-directed to a file, which accomplishes this nicely. But on running the 
above command, it is determined that +init=epsg:29900 does not contain 
enough information on datum parameters, so the user is prompted for more 
information. These prompts are written to stderr, so the user can still 
see them even though stdout is re-directed. The user can interactively 
choose the datum paramters and then the final version of the WKT output is 
written to the file. If the prompts also went to stdout then the user 
wouldn't see them and the program would just hang waiting for input from 
the user.

I suppose that for modules that only write output to another file in the 
GIS database, having information messages printed to stdout wouldn't 
result in mixing up, but still I was under the (possibly mistaken) 
impression that writing to stderr ensured the messages would always appear 
where the user could see them and act on them, regardless of where stdout 
was appearing (e.g. in a future GUI perhaps the stdout would be placed in 
a pretty 'results' window to be stored while stderr could be kept out of 
the way).

Any thoughts?

Paul




More information about the grass-dev mailing list