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

Scripts/Batch Discussion :

Rediriger stderr stdout dans fichier pour plusieurs commande


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut Rediriger stderr stdout dans fichier pour plusieurs commande
    Bonjour,

    Je cherche à rediriger les sorties stderr et stdout vers un fichier pour plusieurs commandes dos. Je m'explique :

    - J'arrive à rediriger stderr et stdout pour une commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    del fichierTest >> log.trace 2>&1
    - J'arrive à rediriger stderr et stdour pour plusieurs commande MAIS à condition que celles-ci ne renvoie pas de parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (del fichierTest1
    echo Coucou
    del fichierTest2) >> log.trace 2>&1
    Le problème est que dans mon cas le résultat de mes commandes renvoie presque toujours des parenthèses. Donc ça bug. (et je me demande s'il n'y a pas autres choses que les parenthèses qui font bugger)


    J'ai trouvé le script suivant en shell Unix qui fait ce que je souhaite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    exec 3>&1     # "sauvegarder" stdout
    exec 4>&2     # "sauvegarder" stderr
    exec 1>>monfichier.trace      #rediriger stdout vers ton fichier
    exec 2>>monfichier.trace      #rediriger stderr vers ton fichier
    # exécuter tes commandes
    rm foo
    echo bar
    rm baz
    exec 1>&3 # restaurer la "valeur" de stdout
    exec 2>&4 # restaurer la "valeur" de stderr
    exec 3>&- # fermer le FD 3
    exec 4>&- # fermer le FD 4
    Super, mais malgré toutes mes tentatives, impossible de faire fonctionner les commandes exec ... sous DOS.

    Ma question est donc :
    - Comment transformer ce script sheel unix en DOS ?
    - OU : comment faire autrement ?
    - ET en bonus : si quelqu'un a une idée pour que le résultat s'affiche aussi sur la sortie standard stdout, ce serait parfait.

    Merci beaucoup d'avance !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    Lu Fylhan,

    Je ne sais pas exactement, ce qu'est stderr et stdout, mais avec l'exemple que tu vient de donner il ce pourrait que l'on trouve une solution.

    Exemple donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (del fichierTest1
    echo Coucou
    del fichierTest2) >> log.trace 2>&1
    Exemple de ce que j'ai cru comprendre que tu cherche a faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (del fichierTest(1)
    echo Coucou
    del fichierTest(2)) >> log.trace 2>&1
    Si tel est le cas, rien de plus simple, il suffit de précéder chaque caractères spéciaux, par le caractère d'échappement en MsDos : ^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (del fichierTest^(1^)
    echo Coucou
    del fichierTest^(2^)) >> log.trace 2>&1
    Tester tel quel, il me supprime bien fichierTest(1) et fichierTest(2)

    J'espere avoir compris

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Merci vita pour ta réponse !

    En fait stdout c'est la sortie standard (= ce que renvoit une commande quand tout va bien), et stderr c'est le sortie d'erreur (= ce que renvoit une commande quand y a un pépin), en général les 2 s'affichent sur le terminal.

    Ta réponse m'aide mais ne répond pas exactement à ma question. En effet je cherche surtout à supprimer les parenthèses du résultat des commandes. Cela dit, je ne savais pas que c'était l'accent circonflexe le caractère d'échappement en DOS, et c'est à mon avis sur cette voix-là qu'il faut que j'avance pour la solution 1. Il y a un moyen de faire précédé automatiquement des parenthèses par un accent circonflexe ?

    Quant à la deuxième méthode, c'est a posteriori celle qui me parait la mieux vu que je ne maitrise pas ce que peuvent renvoyer mes commandes. Mais toujours impossible de faire cet exec. Une idée ?

    Merci encore !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    Merci pour l'info, je me coucherai moins bête

    Si j'ai bien compris, tu peut utiliser la commande externe switch.exe

    switch.exe tonfichier "(" "^("
    switch.exe tonfichier ")" "^)"

    Toutes les parenthèses de ton fichier "tonfichier" seront effectivement précéder du ^

    Si j'ai mal compris, faut que je me fasse greffer un cerveau xD

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Ah bah je ne savais pas que ça existait ça, merci !
    Le problème c'est qu'il faudrait que switch fonctionne aussi sur une commande et ça ne fonctionne que sur un fichier. Je pourrais passer par un fichier temporaire, mais en fait ça revient à faire ce que je chercher à faire. (puisqu'en passant par un fichier temporaire, je devrai le faire pour chaque commande, or justement je veux éviter ça en essayant de récupérer le résultat de toutes les commandes dans 1 fichier)

    Je sèche un peu plus de jour en jour. Pour l'instant j'ai trouvé une solution acceptable mais pas tip top car trop dépendante de l'environnement :

    Dans monFichierBat.bat je met mes commandes.
    Puis dans un autre fichier je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call monFichierBat.bat >> fichier.trace 2>&1
    C'est relativement radicale, mais j'espère qu'il existe une autre solution. Si quelqu'un a des idées !

  6. #6
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    salut Fylhan,
    t'as un exemple de commande qui renvoie des parenthèses ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Salut minnesota,

    Ce que je veux loguer c'est en général un enchainement de set et de java. Les set renvoient rarement quelque chose, par contre s'il y a une erreur dans mon code Java, la commande java renvoie plein de jolies messages explicatifs avec le nom des méthodes (maMethode(), ...) des crochets, des parenthèses et tout un tas de bazar.
    D'où mon problème.

  8. #8
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Si j'ai le temps, je ferait un programme de test.

    En tout cas, au lieu de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (del fichierTest1
    echo Coucou
    del fichierTest2) >> log.trace 2>&1
    rien ne t'interdit d'utiliser celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    del fichierTest1 >> log.trace 2>&1
    echo Coucou
    del fichierTest2 >> log.trace 2>&1
    L'écriture est plus lourde, mais ça ne change rien au niveau des performances.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    En effet, c'est ce que j'utilise pour l'instant et ça fonctionne très bien.
    Le problème est que dans la boîte où je travaille plusieurs bash sont utilisés pour chaque projet, et chaque bash fait quand même quelques lignes. ça devient donc vite lourd de mettre un ">> log 2&>1" à la fin de chaque ligne. (traduire : donc on ne le fait pas) D'où l'idée de réussir à loguer plusieurs commandes d'un coup.

    Merci pour vos réponses. Je vous tiens au courant de mes avancements. Et si quelqu'un à un ou plusieurs idées

  10. #10
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    re,

    J'ai testé et je ne pense pas que ce sont les parenthèses qui sont en cause.

    voici le script utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (err
    err
    err
    echo sample
    err ) >> log.txt 2>&1
    tu peux aussi essayer cette autre forme qui en fonction du contexte peut avoir un comportement différent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (
    err
    err
    err
    echo sample
    err 
    ) >> log.txt 2>&1
    et en pièce jointe l'exe de test utilisé :
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip err.zip (104,6 Ko, 110 affichages)

Discussions similaires

  1. ajout ligne departement dans fichier pour export futur
    Par SBERKO dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/10/2012, 10h40
  2. [Batch] Rediriger sortie console vers fichier malgré plusieurs call?
    Par takinelinfo dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 01/12/2011, 17h02
  3. [PHP 5.0] Modifier fichier pour plusieurs upload dans un formulaire avec BDD
    Par theavengers dans le forum Langage
    Réponses: 4
    Dernier message: 14/10/2009, 18h42
  4. [excel vba]case à cocher dans excel pour plusieurs lignes
    Par fcoisb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2005, 11h23
  5. Rediriger STDERR dans un fichier
    Par LeBigornot dans le forum C
    Réponses: 5
    Dernier message: 27/01/2005, 12h49

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