How to display the result of an external command in a widget

Simplest Form

pack [text .text]
set result [exec my_command]
.text insert 1.0 $result

Can someone show us what is needed to do things like add scrollbars that get displayed if the text is bigger than the text widget's display, as well as perhaps some key bindings to scroll back and forth?

Here's what I am trying - but it doesn't display anything...

#! /usr/tcl84/bin/tclsh
# Needed:
#       1. scrollbar
#       2. exit button or binding

package require Tk
package require BWidget

 set b [ScrolledWindow .base -auto both]
 pack $b
 text $b.text
 pack $b.text
 set result [exec cat $argv]
 $b.text insert 1.0 $result
 puts "Done"

See documentation on exec for information about how to pass in command-line arguments and "stdin" data.

[Is there no comparably reduced example already in the Wiki?]


If the process is a long running process, this will lock up your GUI. Checkout the fileevent page to see how to run the command with open & just get updates as they are available. (Change the line puts "got: $line" to .text insert end $line and possibly add a .text see end)

bbh


What about a tk app that talks to a running tcl app in a separate process - is there an example that shows doing this?

Well, yes, although perhaps it's not obviously labeled that way yet. "Inventory of IPC methods" aims to point to all the ways to get two such processes in communication.


See also tailf and Tailing widget.