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

Langage Perl Discussion :

Rediriger les erreurs d'une commande


Sujet :

Langage Perl

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut Rediriger les erreurs d'une commande
    Bonjour à vous !

    Voici ma question (je suppose très bête ). Je lance une commande de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my($ls) = `ls *.out`;
    Y a t'il une possibilité de rediriger les erreurs de cette commande ? Je souhaite en fait ne pas les afficher, je traite moi-même l'erreur.

    Merci de vos réponses !

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Deux possibilités :
    - Tu utilises les fonctionnalités de ton shell et tu redirige les erreurs vers la sortie standard (que tu récupères) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my($ls) = `ls *.out 2>&1`;
    ou vers un fichier quelconque (pour un traitement différé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my($ls) = `ls *.out 2>blabla.txt`;
    - Tu utilises les fonctions avancés de Perl pour obtenir à la fois la sortie d'erreur et la sortie standard, avec le module IPC::Open3 (qui est dans le core), qui te permettra d'obtenir les sorties et entrées dans des handles séparés.
    (perldoc IPC::Open3)

    --
    Jedaï

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut Jedai

    Ok, je vais regarder ca et je te tiens au courant.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut Jedai

    Tu as raison, j'aurais meme du me tourner vers mon passe de linuxien. Comme je te l'ai dit, je ne souhaitais pas necessairement afficher les erreurs de la commande appelee, donc, concernant la redirection, autant rediriger vers /dev/null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my($ls) = `ls $dir/*.out 2> /dev/null`;
    Et le tour est joue
    Merci encore de ton aide !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par GLDavid
    Salut Jedai

    Tu as raison, j'aurais meme du me tourner vers mon passe de linuxien. Comme je te l'ai dit, je ne souhaitais pas necessairement afficher les erreurs de la commande appelee, donc, concernant la redirection, autant rediriger vers /dev/null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my($ls) = `ls $dir/*.out 2> /dev/null`;
    Et le tour est joue
    Merci encore de ton aide !

    @++
    Bonsoir,

    Pardonnez-moi de m'immiscer dans ce post, je suis dans une situation proche :
    lancement de "rar" en mode silent qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system "rar e -o+ filename 2> /dev/null
    sortie à l'écran => NOK


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system "rar e -o+ filename 2>1 >/dev/null
    rien à l'écran (OK), mais création d'un fichier "1".

    Pourriez-vous m'éclairer sur la bonne syntaxe ?
    Merci d'avance.

    PS : j'ai cherché un commutateur de type "quiet" dans rar, en vain.

  6. #6
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Essaies comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system 'rar e -o+ filename >/dev/null 2>&1'
    D'abord, rediriger stdout vers /dev/null, puis stderr (le 2) vers là ou sort stdout (&1)
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    c'est quoi ???

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par 2Eurocents
    Essaies comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system 'rar e -o+ filename >/dev/null 2>&1'
    D'abord, rediriger stdout vers /dev/null, puis stderr (le 2) vers là ou sort stdout (&1)
    Super, 2Eurocents, cela fonctionne.

    J'ai un peu de mal à appréhender pourquoi les deux paramètres "stderr" et "stdout"
    doivent être traités, mais je regarderai leur rôle dans la FAQ PERL.

    Merci.

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par kafifi
    J'ai un peu de mal à appréhender pourquoi les deux paramètres "stderr" et "stdout"
    doivent être traités, mais je regarderai leur rôle dans la FAQ PERL.
    Ne cherche pas ... cela n'a aucun rapport avec PERL.

    Ce comportement, avec les redirections > (équivalent à 1>, pour stdout) et 2> (pour stderr) est un comportement de ton shel sous-jacent, invoqué par la commande system.

    Si tu veux connaître le comportement de ton shell vis-à-vis des redirections, je t'invite à lire le man de bash, à la section Redirections.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par 2Eurocents
    Citation Envoyé par kafifi
    J'ai un peu de mal à appréhender pourquoi les deux paramètres "stderr" et "stdout"
    doivent être traités, mais je regarderai leur rôle dans la FAQ PERL.
    Ne cherche pas ... cela n'a aucun rapport avec PERL.

    Ce comportement, avec les redirections > (équivalent à 1>, pour stdout) et 2> (pour stderr) est un comportement de ton shel sous-jacent, invoqué par la commande system.

    Si tu veux connaître le comportement de ton shell vis-à-vis des redirections, je t'invite à lire le man de bash, à la section Redirections.
    Super ! Merci beaucoup.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/09/2007, 16h51
  2. Intercepter les erreurs d'une commande ?
    Par Olivier Regnier dans le forum Linux
    Réponses: 2
    Dernier message: 01/12/2006, 12h28
  3. Gestion des erreurs sur une commande multiple
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 15h03
  4. [VB6]Gérer les espaces dans une command FTP
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/07/2006, 21h28
  5. Réponses: 12
    Dernier message: 04/06/2006, 00h19

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