IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Redirection flux d'erreur


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut Redirection flux d'erreur
    Salut tout le monde!

    J'utilise une librairie de fonctions qui envoi les erreur en stderr. le seul soucis que j'ai c'est que je ne sais pas comment faire pour diriger ces erreurs dans un fichier de log. Je pense qu'il faut modifier le STDERR.. mais je ne sais aps comment faire. Si vous avez une idée je suis preneur.

    merci d'avance.

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/perl
    use strict; use warnings;
     
    use IO::Handle;
     
    open my $errfh, '>', 'error.txt' or die "\n";
     
    STDERR->fdopen( $errfh,  'w' ) or die $!;
     
    warn "Nous y voilà\n";

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut
    Ok, j'avais trouvé un truc similaire :

    open(STDOUT, ">stdout.log" ) or die "cannot redirect stdout output in log file : $!\n";
    open(STDERR, ">stderr.log" ) or die "cannot redirect stderr output in log file : $!\n";

    Quand on a un programme qui utilise plusieurs script, est ce qu'il est possible de faire la redirection pour tous les scripts au début du programme, ou bien doit-on ouvrir mettre la redirection au début de chaque script?

    Et heu autre question idiote, comment faire pour rajouter un retour à la ligne à chaque appel de ces deux fonctions? Merci

  4. #4
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    IO::Handle est plus propre.

    Si tu veux le faire à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    open my $newerr, ">&", \*STDERR 
      or die "Can't dup STDERR: $!";
    open STDERR, '>', "error.txt" 
      or die "Can't redirect STDOUT: $!";
     
    warn "Nous y voilà\n";
     
    open STDERR, '>&', $newerr  
      or die "Can't dup new error output: $!";
     
    warn "Nous n'y sommes plus\n";
    Tu rediriges les entrées sorties de ton script Perl comme tu veux (vois ci-dessus).

    Ben print des "\n".

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut
    Ok mais ca c'est dans le cas ou je sais que je vasi avoir des erreur quan c'est moi qui écrit le script + les erreur.

    Là je dois catcher les erreurs d'une libraire de fonction que je ne peux pas modifier. Donc quand je fais STDERR... tout ce que je peux faire c'est récupérer cette erreur.
    Mais est ce que je peux la préfixer une erreur que je récupère avec la date ou l'heure de l'erreur sasn modifier la librairie qui m'envoi cette erreur?? ou bien impossible?

  6. #6
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Oui, je t'ai montré plus haut. Tu rediriges ta sortie erreur standard, puis tu appelles tes routines. Les erreurs seront redirigés vers ton fichier de log. (Le deuxième exemple te montre le détail, plus comment faire pour restaurer stderr.)

    Regarde IO::Handle et perldoc -f open.

    Sinon si tu veux du exception handling, ça va probablement dépendre du module en question. S'il utilise autodie, ce sera bien plus simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. redirection flux standart dans un composant graphique
    Par swingNJava dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 29/08/2007, 15h56
  2. Redirection vers fichier erreur javac
    Par XtraDelirium dans le forum Langage
    Réponses: 7
    Dernier message: 23/02/2007, 20h51
  3. problème lecture flux d'erreur standart
    Par youp_db dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 10/10/2006, 10h50
  4. [XSL] flux RSS erreur xsl_create()
    Par Sayrus dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/12/2005, 13h00
  5. redirection flux
    Par hiko-seijuro dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2005, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo