[GRASS-dev] Merging stdout and stderr

Glynn Clements glynn at gclements.plus.com
Tue Nov 14 06:54:06 EST 2006

Paul Kelly wrote:

> The GRASS console thing (I guess that's where the name gronsole comes 
> from?) which runs commands via the Tcl/Tk "open" command and captures 
> their stdout and stderr, displaying some output as-is to the gronsole 
> window and catching certain things like percentage complete and warnings 
> and displaying them differently is actually quite cool.
> I remember discussion on the list about how stdout and stderr had to be 
> merged because Tcl/Tk has a bug/feature in that it treats anything written 
> to stderr as an error indicator for the called program. On Unix this 
> merging is done as follows:
> set cmd [concat | $cmd 2>@ stdout]
> but the "2>@ stdout" syntax will not work on Windows. A cross-platform 
> solution would be to use the "|&" redirector instead of "2>@". "|&" means 
> "pipe both stdout and stderr to stdin of the following command" (see 
> http://www.tcl.tk/man/tcl8.5/tutorial/Tcl26.html ). This command could 
> then copy everything to its stdout and that's what gronsole gets back.
> The Unix cat command is an obvious choice but it isn't available on 
> Windows. "more" kind of works but it's a shell (cmd.exe) built-in command 
> on Windows so not suitable either. I was wondering if anybody has any 
> thoughts on
> 1. Are there any other Windows commands that might be suitable for this?
> or
> 2. Might it be a worthwhile idea to include a simple program with GRASS 
> that did this (copies everything from stdin to stdout) so we can be sure 
> what's going on?

I suggest the latter, i.e. write our own mini-"cat" program. It will
need to explicitly put stdin/stdout into line-buffered mode (pipes are
block-buffered by default).

BTW, 2>@stdout doesn't merge stdout/stderr, in the way that 2>&1 does
in bash. It redirects the process' stderr to wish's stdout; on Unix,
this is typically the terminal from which gis.m was started, but wish
may not have stdin/stdout/stderr channels on Windows.

Glynn Clements <glynn at gclements.plus.com>

More information about the grass-dev mailing list