Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ^Tifa^ en 1 Junio 2008, 00:54 am



Título: Perl/Tk y salida Estandar
Publicado por: ^Tifa^ en 1 Junio 2008, 00:54 am
Hola usando de ejemplo el siguiente codigo :

Código:
#!/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.


Título: Re: Perl/Tk y salida Estandar
Publicado por: ^Tifa^ en 6 Junio 2008, 22:45 pm
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:


Título: Re: Perl/Tk y salida Estandar
Publicado por: sirdarckcat en 7 Junio 2008, 00:11 am

        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!!


Título: Re: Perl/Tk y salida Estandar
Publicado por: ^Tifa^ en 7 Junio 2008, 17:47 pm
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.