Posted to tcl by aspect at Sun Jan 19 16:10:07 GMT 2014view pretty
foreach {0r 0w} [chan pipe] break foreach {1r 1w} [chan pipe] break foreach {2r 2w} [chan pipe] break fconfigure stdin -blocking no fconfigure $1r -blocking no fconfigure $2r -blocking no fconfigure $0w -buffering none set cmd {grep-v {error}} fileevent stdin readable [list {*}$cmd stdin $0w] fileevent $1r readable [list {*}$cmd $1r stdout] fileevent $2r readable [list {*}$cmd $2r stderr] proc cat {in out {cond {}}} { set s [read $in] if {$s ne {}} { if {$cond eq {} || [uplevel 1 $cond [list $s]]} { puts -nonewline $out $s } } elseif {[eof $in]} { incr ::eof } } proc not {args} {expr ![uplevel 1 $args]} proc grep {s in out} {cat $in $out [list regexp $s]} proc grep-v {s in out} {cat $in $out [list not regexp $s]} exec {*}$argv <@$0r >@$1w 2>@$2w & vwait eof