Loguer l’entrée et la sortie standard d’un programme sous Linux

5 avril 2008 – 14:12

Voici un petit script Bash qui permet de loguer très facilement l’entrée (stdin) et la sortie standard (stdout) d’un programme, et ce sans le modifier.

#!/bin/bash

LOG_STDIN=/path/du/log/stdin.log
LOG_STDOUT=/path/du/log/stdout.log
PROG="/path/du/prog avec parametres eventuels"

tee $LOG_STDIN | $PROG | tee $LOG_STDOUT

Comme vous pouvez le voir, ce script repose sur la commande tee qui permet de dupliquer un flux.Il suffit de lancer ce script à la place du programme que vous souhaitez espionner. Cette astuce pourra être utile aussi bien au développeur qu’au reverse-engineer

Pour la petite histoire, j’ai développé ce petit script dans le cadre d’un projet d’intelligence artificielle. Le but est de réaliser un joueur artificiel de Jeu de Go. Notre équipe a choisis d’utiliser le protocole GTP qui permet de faire communiquer des joueurs avec des interfaces graphiques. Ce script nous permet donc de déboguer plus facilement notre joueur car il permet de garder une trace des trames GTP échangées. Nous l’avons également utiliser pour avoir une idée des commandes GTP échangées entre une interface comme qGo et un joueur déjà existant tel que GNUGo.

  1. 2 réponses à “Loguer l’entrée et la sortie standard d’un programme sous Linux”

  2. Pour java, il suffit d’ouvrir un terminal et d’ajouter ça :
    while (true); do killall -3 java; sleep 2; done

    C’est très pratique pour tracer un programme, tant qu’on n’utilise pas ant… En gros ça force l’impression par la JVM des stacktraces des programmes lancés. Combiné au tee ça donne de précieuses informations sur l’état d’un programme.

    Par - le 20 avril 2008

  3. plop!
    Autre possibilité , l’utilisation de strace :

    strace -f -e read,write -p
    Dorenavant, tout ce qui est tape dans le shell apparait comme la commande « uname -a  » ou encore « alias ».

    Bon travail et bonne continuations ;-) .

    Par kmkz le 18 juillet 2008

Désolé, les commentaires sont fermés pour le moment.