Bonjour :)
J'ai un petit script python qui attends des intereractions utilisateurs (avec raw_input).
Pour pouvoir débugger mon programme, j'aimerais rediriger la sortie standard + sortie d'erreur dans un fichier.
Le problème c'est que si je fais ça naïvement avec >, tout part dans le fichier et je ne vois donc plus mes messages liés à mes raw input (et vu que c'est un petit pogramme interractif, bah je peux rien faire).
Du coup, je souhaiterais rediriger la sortie standard + sortie d'erreur vers un fichier de log tout en continuant d'afficher sur la console (histoire que je puisse interragir avec mon programme).
Auriez vous des pistes sur comment je pourrais m'y prendre ?
Cordialement
# tee
Posté par ecid . Évalué à 4.
Bonjour,
C'est le boulot de tee ça:
https://linux.101hacks.com/unix/tee-command-examples/)https://linux.101hacks.com/unix/tee-command-examples/
# tee ?
Posté par Flyounet (site web personnel) . Évalué à 1.
La commande
tee
ne pourrait pas t'aider ?# developper comme il faut
Posté par NeoX . Évalué à 3.
par defaut il y a plusieurs canaux,
le stdout (>)
le stderr (2>)
si tu programmes comme il faut, tes sorties standard se font sur stdout,
tu peux alors rediriger les stderr vers un fichier
si tu veux rediriger le standard et l'erreur dans deux fichiers differents
si tu veux rediriger dans le meme fichier (en fait la sortie 2 dans la sortie 1 dans tonfichier.log
[^] # Re: developper comme il faut
Posté par gaaaaaAab . Évalué à 2.
certes, mais ce qu'on cherche à faire là, c'est à rediriger stdout et stderr dans un fichier, tout en continuant à afficher stdout
[^] # Re: developper comme il faut
Posté par NeoX . Évalué à 3.
avec tee comme indiqué dans un autre poste, ou en bidouillant
dans un terminal tu lances le script
dans un autre tu surveilles ce qu'il y a dans le log, ce qui te permet de repondre au question, en tapant dans le premier terminal
[^] # Re: developper comme il faut
Posté par gaaaaaAab . Évalué à 2.
oui. Je trouvais juste ton premier commentaire un peu trop générique par rapport à la question. Aussi, tel que je l'avais compris, l'enjeu intéressant était d'arriver à joindre stderr et stdout dans un fichier tout en continuant à les discriminer pour l'affichage. Mais vu la suite de la discussion, c'était un peu overkill :)
# peut-être tee ?
Posté par gaaaaaAab . Évalué à 2.
la commande tee écrit copie la sortie standard dans un fichier. Peut-être un truc du genre
Bon, en testouillant, l'ordre des lignes dans le fichier généré n'est pas respecté, donc c'est pas parfait.
Tu peux tenter en te mettant en less +F sur ton fichier de log global, et utiliser ton fichier de log pour l'affichage du résultat de tes commandes interactives. Mais si tu as trop de lignes sur stderr, ça va être compliqué.
Autre possibilité, si tu as la main sur le code source de ce que tu testes, rajoute les entrées utilisateurs dans tes lignes de debug.
[^] # Re: peut-être tee ?
Posté par totof2000 . Évalué à 3. Dernière modification le 09 avril 2018 à 11:21.
commande 2>&1 | tee nom_fichier_out
[^] # Re: peut-être tee ?
Posté par gaaaaaAab . Évalué à 2.
ça peut répondre au besoin, mais c'est pas idéal. Dans le cas d'un programme qui ferait beaucoup de polling ou qui serait multi-thread, ça pourrait rendre stdout inexploitable en mode interactif. L'idéal serait de continuer à afficher juste stdout. Mais tee semble répondre au besoin de madem, donc bon, restons-en là :-)
# Redirection console + fichier
Posté par madem . Évalué à 1.
J'avais déjà regardé tee mais je n'avais aucun retour (mis à part à la fin du programme) quand je faisait un truc du style python mon_prog.py | tee log.log.
Mais en flushant mes affichage dans mon programme, ça à résoulu le problème :)
DOnc effectivement, tee était la solution (ou du moins une des solutions).
Merci pour la réactivité en tout cas !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.