Posted to tcl by aspect at Fri Jun 18 01:00:49 GMT 2010view raw
- namespace eval subprocess {
- # this will be set to 1 when the subprocess has finished
- variable finished 0
- # here we can save the output of the subprocess
- variable output {}
- proc handledata {f} {
- variable finished
- variable output
- if {[eof $f]} {
- set finished 1
- } else {
- set x [read $f]
- puts -nonewline $x
- append output $x
- }
- }
- proc run {cmd} {
- variable finished
- set finished 0
- variable output
- set output {}
- fconfigure stdout -buffering none
- set f [open |$cmd]
- # -buffering none ensures we can read output char by char, instead of line by line
- # line by line reading may require -translation to be set
- fconfigure $f -buffering none -blocking 0
- fileevent $f readable [list [namespace current]::handledata $f]
- # vwait waits for the named variable to change
- vwait [namespace current]::finished
- close $f
- }
- }
- set cmd ./try.sh
- puts "Opening $cmd"
- ::subprocess::run $cmd
- puts "Finished! Output was '$::subprocess::output'"