Stdou redirigé vers un fichier mais quand meme affiché sur la console? - Perl - Programmation
Marsh Posté le 22-10-2007 à 21:30:26
Euh, pourquoi ne pas changer le code pour assigner les sorties logs à un flux de données spécifiques, sans toucher à stdout ?
Marsh Posté le 22-10-2007 à 21:35:57
Elmoricq a écrit : Euh, pourquoi ne pas changer le code pour assigner les sorties logs à un flux de données spécifiques, sans toucher à stdout ? |
Hmm genre comment ? ^^
Pour le moment, stdout et stderr sont redirigés, je ne connaissais pas d'autres moyens pour rediriger des flux vers un fichier
Marsh Posté le 22-10-2007 à 21:44:20
La redirection se fait à l'intérieur du script, ou bien à l'appel avec un bête "blabla.pl > fichier_de_logs" ?
Marsh Posté le 22-10-2007 à 21:54:30
ReplyMarsh Posté le 22-10-2007 à 21:59:29
Ben annule la redirection, et assigne un nom de flux différent de STDOUT à la place à l'ouverture du fichier de logs.
Par contre il te faut ensuite rechercher toutes les sorties du programme pour les forcer à se produire sur le flux. Comme ça au final tu obtiendras le même comportement qu'au départ, sauf que la sortie standard restera intacte.
Marsh Posté le 22-10-2007 à 22:08:55
Je ne comprends pas ton "assigne un nom de flux différent de STDOUT "
Marsh Posté le 22-10-2007 à 22:11:32
Tu dois avoir un truc du genre "open BLABLA, ">fichier de logs", suivi de "STDOUT->fdopen(\*BLABLA, "w" )".
Désactive le "STDOUT->...", puis modifie tous les "print ..." pour "print BLABLA ...".
That should do it.
Marsh Posté le 22-10-2007 à 22:15:14
ReplyMarsh Posté le 21-11-2007 à 21:33:10
ou tu crée un tuyau supplémentaire via tee
Code :
|
Marsh Posté le 21-11-2007 à 21:37:27
Son problème était inverse : le script redirigeait stdout et donc... il n'avait plus du tout de stdout.
tee permet de rediriger stdout tout en conservant le flux.
Marsh Posté le 22-11-2007 à 13:17:55
Ben moi je comprend le problème comme couak. Il me semble que ce que ParadoX veut c'est un équivalent de tee.
Marsh Posté le 22-11-2007 à 13:44:55
Je peux effectivement me tromper, mais je campe sur mes positions.
Parce que c'est le sujet de ma seconde réponse, et que ParadoX indique que la redirection se fait à l'intérieur du script.
Marsh Posté le 22-11-2007 à 17:18:34
Oui, je pense qu'à l'intérieur du script il fait un truc du genre :
close STDOUT; |
ce qui a pour effet d'envoyer dans un fichier tout ce qui devait s'afficher sur stdout. Et lui il voudrait que tout ce qui devrait s'afficher sur stdout s'affiche à la fois sur stdout et dans le fichier (ce qui est impossible sans faire deux sorties).
Marsh Posté le 22-11-2007 à 20:36:33
Sinon, pour afficher dans les deux sorties (écran et fichier) sans réécrire tous les prints, en mode unix, il est possible de rediriger le stdout vers tee
Code :
|
Il n'y a pas pour moi de besoin de clore le STDOUT avant...
Bon courage...
Marsh Posté le 22-11-2007 à 20:54:00
Je ne connaissais pas cette solution, ça a l'air chouette ça.
Marsh Posté le 22-11-2007 à 21:14:07
Perso je ne l'ai pas essayé pour STDOUT mais pour STDERR car j'utilise des modules pour lesquels je voulais garder une trace écrite des messages envoyés sur STDERR pour pouvoir faire des analyses à posteriori en cas de pb...
Et ne pas faire attention or return(ERR_CODE_FATAL, "..." ) c'est ma gestion perso des codes retours ... faire un die à la place
Marsh Posté le 23-11-2007 à 00:01:22
Ouais joli ! En fait j'avais essayé le coup du open avec un pipe vers tie mais avec le close avant ça marchait pas (tee: write error: Bad file descriptor). Sans fermer STDOUT ça marche bien.
Marsh Posté le 22-10-2007 à 21:26:21
Bonjour,
J'ai un script perl qui cree des fichiers de log en redirigant le Stdout vers un fichier. L'ennui, c'est que quand la fonction logguer est activee, je ne vois plus les commandes sur la console. Y-aurait-il un moyen pour faire les 2 en meme temps ?
Merci
Message édité par ParadoX le 22-10-2007 à 21:29:34
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt