Posted to tcl by hypnotoad at Wed Dec 11 20:03:50 GMT 2019view pretty
# Master.tcl set here [file dirname [file normalize [info script]]] puts "I AM $here" lassign [chan pipe] slaveout pipein puts "STARTING SLAVE" set slavein [open [list | [info nameofexecutable] [file join $here slave.tcl] ] r+] set slaveout $slavein proc SEND {command} { global slavein slaveout puts "M> $command" chan puts $slavein $command #catch {chan flush $slavein} gets $slaveout r puts "M< $r" return $r } chan configure $slaveout -buffering line puts "SENDING COMMAND" SEND {expr 2+2} SEND {clock seconds} after 2000 SEND {expr 2+6} SEND {clock seconds} after 2000 SEND {exit} exit 0 # slave.tcl set here [file dirname [file normalize [info script]]] set flog [open [file join $here log] w] chan configure $flog -buffering line puts $flog "STARTED" chan configure stdin -buffering line chan configure stdout -buffering line while 1 { try { puts $flog "S WAIT" if {[gets stdin line]<=0} { exit 1 } puts $flog "[clock seconds] S< $line" set r [eval $line] puts $flog "[clock seconds] S> $r" puts stdout $r } on error {er errdat} { puts $flog [dict get $errdat -errorinfo] } }