# extended_puts.tcl v1.0 # M.Hoffmann, 20.10.2005 # based on http://wiki.tcl.tk/8502 package provide extend_puts 1.0 proc extend_puts {{stdoutadd {}} {stderradd {}}} { if {![llength [info command ::tcl::puts]]} { rename puts ::tcl::puts } proc puts args [format { set explicit_stdout 1 set la [llength $args] if {$la<1 || $la>3} { catch {::tcl::puts} rc; # read original helptxt error [string map {::tcl:: ""} $rc]; # trigger error/SyntaxHelp } set nl \n if {[lindex $args 0]=="-nonewline"} { set nl "" set args [lrange $args 1 end] } if {[llength $args]==1} { set args [list stdout [join $args]] set explicit_stdout 0 } foreach {channel s} $args break set stdoutadd "%s" set stderradd "%s" if {$explicit_stdout == 1 && [llength $stdoutadd] && $channel=="stdout"} { catch {uplevel [list $stdoutadd $s]} } elseif {[llength $stderradd] && $channel=="stderr"} { catch {uplevel [list $stderradd $s]} } set cmd ::tcl::puts if {$nl==""} {lappend cmd -nonewline} lappend cmd $channel $s uplevel $cmd } $stdoutadd $stderradd] }
One intended use of this is to automatically write stderr-output to the windows-eventlogs.
See also puts - puts workaround