stderr is one of the [stdio] output files opened - applications and functions tend to use it for the output of error messages. no editing is permitted Ok [[Explain common idioms for management of stderr from subprocesses.]] [bgexec] [[ [exec] conventions]] ---- Pure Tcl programs ''write'' to stderr in two ways: * "puts stderr $msg" gives fine-grained control; * "[error] $message" generally has the effect of reporting a diagnostic [traceback] to stderr (except if prevented by an outer [catch], or in [wish] which pops up an error info window instead). ---- Often people ask how to [open] a [pipeline] to a command and read both its [stdout] and stderr. One recent example of how to do this was: set fd1 [open "|somecmd |& cat" "r"] (if your system has a command named cat in the default path). [glennj]: Or, without having to open a cat process (see http://www.tcl.tk/man/tcl8.4/TclCmd/exec.htm): set fd1 [open "|somecmd 2>@ stdout" r] Here's a quick test sequence that takes advantage of [close] returning the standard error for ''blocking'' pipes: set somecmd {sh -c {echo "to stdout" ; echo >&2 "to stderr"}} set errorCode "" puts "no redirection:" set f [open "| $somecmd" r] set std_out [read -nonewline $f] catch {close $f} std_err puts " std_out is {$std_out}" puts " std_err is {$std_err}" puts " errorCode is {$errorCode}" set errorCode "" puts "redirected:" set f [open "| $somecmd 2>@ stdout" r] set std_out [read -nonewline $f] catch {close $f} std_err puts " std_out is {$std_out}" puts " std_err is {$std_err}" puts " errorCode is {$errorCode}" The output should be: no redirection: std_out is {to stdout} std_err is {to stderr} errorCode is {NONE} redirected: std_out is {to stdout to stderr} std_err is {} errorCode is {} ---- Unfortunately, the 'cat' solution means you lose the exit status of the process whereas the non-cat solution doesn't let your script read the text, it only redirects it to the stdout channel of the tclsh process. It seems that [bgexec] provides the only complete solution. ---- See also [stdout], [stdin], [stdio], and [magic names], [Tcl syntax help] ---- What category should this page be in? "infrastructure?" "Glossary"?