#! perl -slw use strict; use threads; use Thread::Queue; use IO::Pipe; sub runNGather { my( $Q, $cmd ) = @_; my $pipe = IO::Pipe->new(); $pipe->reader( "$cmd 2>&1" ); $Q->enqueue( $_ ) while <$pipe>; $Q->enqueue( undef ); return; } my $Q = new Thread::Queue; threads->create( \&runNGather, $Q, $ARGV[0] )->detach; require Tk; require Tk::ROText; my $top = MainWindow->new; #$mw-> Toplevel(); my $label = $top -> Label( -text=>"STDOUT from script", -relief=>"groove" )->pack(); my $ro = $top->Scrolled( 'ROText', -width => 60, -height=>20, -scrollbars=>"e" )->pack(); # continuously display output while( $_ = $Q->dequeue ) { $ro->insert("end", "$_"); $ro->update(); sleep 1; } # add close button my $close = $top->Button( -text=>"Close window", -command=>sub { destroy $top; } )->pack(); __END__ P:\test>522177 "ping www.perlmonks.org"