1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $fenetre = new MainWindow(
-title => "Première fenêtre Tk ",
-background => "white",
);
# Affichage d'un bouton pour fermer la fenêtre
my $bouton = $fenetre->Button(
-text => "Supprimer fichier",
-command => \&suprfic,
)->pack();
my $texte = $fenetre->Text()->pack;
$texte->Text( -setgrid => 'true' );
#tie *STDOUT, ref $texte, $texte;
my $search_string = '';
my $w_string = $fenetre->Frame()->pack( -side => 'top', -fill => 'x' );
my $w_string_label = $w_string->Label( -text => 'Search string:', -width => 13, -anchor => 'w' );
my $w_string_entry = $w_string->Entry( -textvariable => \$search_string );
my $w_string_button = $w_string->Button( -text => 'Highlight' );
# Redirection STDOUT et STDERR
RedirectionFlux($texte);
MainLoop();
sub suprfic {
`DIR`;
return;
}
#=========================================================================
# Procedure rediriger le STDOUT STDERR
#=========================================================================
sub RedirectionFlux {
my ($Scrolled) = @_;
require File::Temp;
my ( $fh_stdout, $FichierSTDOUT ) = File::Temp::tempfile( UNLINK => 1 );
my ( $fh_stderr, $FichierSTDERR ) = File::Temp::tempfile( UNLINK => 1 );
open( STDOUT, '>', $FichierSTDOUT );
open( STDERR, '>', $FichierSTDERR );
# Lancement d'une fonctionne qui surveille le STDOUT toutes les 0.5 secondes
my $TailleOctetLuSTDOUT = 0;
my $TailleOctetLuSTDERR = 0;
#=========================================================================
# Procedure pour lire un fichier à partir d'un certain nombre d'octet
# Et on affiche le contenu dans un widget
#=========================================================================
my $SubLectureFichierParOctets = sub {
my ( $Fichier, $RefTextWidget, $RefTailleOctetsFichierLu ) = @_;
my $buffer; # Data du fichier à lire
my $buffer_size = 1000; # Lecture par 1000 octets
open( FIC, '<', $Fichier )
or die("Impossible de lire le fichier $Fichier\n");
# On commence la lecture du fichier depuis le début à partir d'un certain
# nombre d'octets
seek( FIC, ${$RefTailleOctetsFichierLu}, 0 );
while ( read( FIC, $buffer, $buffer_size ) != 0 ) {
$RefTextWidget->insert( 'end', $buffer );
}
close(FIC);
# Taille fichier
${$RefTailleOctetsFichierLu} = ( stat($Fichier) )[7];
return;
};
$Scrolled->repeat( 500, [ $SubLectureFichierParOctets, $FichierSTDOUT, $Scrolled, \$TailleOctetLuSTDOUT ] );
$Scrolled->repeat( 500, [ $SubLectureFichierParOctets, $FichierSTDERR, $Scrolled, \$TailleOctetLuSTDERR ] );
return;
} |
Partager