Perl/Tk y salida Estandar

Iniciado por ^Tifa^, 1 Junio 2008, 00:54 AM

0 Miembros y 1 Visitante están viendo este tema.

^Tifa^

Hola usando de ejemplo el siguiente codigo :

#!/usr/bin/perl
use strict;
use Tk;
use Tk::NoteBook;

my $ventana = MainWindow->new();
$ventana->minsize(qw(700 400));
$ventana->maxsize(qw(700 400));
$ventana->configure(-title => "Proyecto");

my $nota = $ventana->NoteBook(-background => 'white')->pack(-fill => 'both', -expand => 1);
my $pestana = $nota->add('Uno', -label => "Uno")->pack();
my $pestana1 = $nota->add('Dos', -label => "Dos")->pack();
my $pestana2 = $nota->add('Tres', -label => "Tres")->pack();

my $frama = $pestana->Frame->pack();
$frama->Label(-text => " ")->pack();
my $texto = $frama->Scrolled('Text', -width => 80, -height => 20, -background => 'white')->pack();
$frama->Button(-text => "Ver", -borderwidth => 4, -relief => 'raised', -width => 20, -command => \&proceso)->pack(-side => 'left');
$frama->Button(-text => "Limpiar", -borderwidth => 4, -relief => 'raised', -width => 20, -command => \&proceso1)->pack(-side => 'right');

MainLoop();

sub proceso {
my $a = system("ps aux > archivo.txt");
open(AA,"<archivo.txt");
my @b = <AA>;
$texto->insert("end", "@b");
close(AA);
};

sub proceso1 {
system("rm archivo.txt");
$texto->delete('0.0', "end");
};


Mi objetivo es lograr (cosa que aun no se como) imprimir la salida estandar STDOUT de algun comando hacia el widget Text (texto), pero cuando intento digase con system("ps aux") el me imprime obviamente en la terminal que es el verdadero flujo de salida estandar STDOUT, y en el widget me imprime el valor que dicho comando devuelve, ya sea cero o uno... yo no quiero guardar en un texto primero la impresion de cierto comando y luego abrir ese texto he imprimirlo en mi widget, yo quiero saber si hay alguna via de dirigir la salida estandar a un widget texto.

^Tifa^

Nadie sabe como redirigir la salida estandar STDOUT a un widget de texto   :-\

Aunque sea en otro lenguaje que no sea Perl/Tk, pueden decirme si tienen una idea ya sea en C++/QT o C/GTK o el que sea, pero que sea en Linux o Unix claro...

Realmente tengo interes de saber si es posible  :huh:

sirdarckcat


        set pipe [open |cat.exe r+]
        fileevent $pipe readable .stderr.processing.

        set process [open "|process.exe 2>@$pipe" r+]
        fileevent $process readable .stdout.processing.

http://wiki.tcl.tk/880

Perl:TK - standard output to text widget
http://www.perlmonks.org/?node_id=332324

Saludos!!

^Tifa^

Gracias  :D

Esto era precisamente lo que andaba buscando :

my $ventana = MainWindow->new();
$ventana->minsize(qw(300 300));
my $texto = $ventana->Text(-width => 20, -height => 10, -background => 'white')->pack();

my $comando = `ps aux`;
$texto->insert("end", $comando);

Supongo que con la funcion system no se puede :) ya que system le dice que ejecute algo del sistema en la salida estandar del mismo sistema, no del interprete perl.

Gracias.