Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Redirection sorties

2 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,


j'ai le code suivant:

system("blablabla 2>&1 /tmp/tmp.log");

Je m'attends à ce que toutes les sorties soient redigirées vers le
fichier de log, mais il semble que ce ne soit pas le cas. Que faut-il
faire pour capter TOUTES les sorties d'un programme et les rediriger
vers un fichier?

Merci pour votre aide!

2 réponses

Avatar
mpg
Le (on) mercredi 27 août 2008 15:11, Guillaume GOURDIN a écrit (wrote) :

system("blablabla 2>&1 /tmp/tmp.log");



Euh, donc là tu ne rediriges pas la sortie standard ?

Je m'attends à ce que toutes les sorties soient redigirées vers le
fichier de log, mais il semble que ce ne soit pas le cas. Que faut-il
faire pour capter TOUTES les sorties d'un programme et les rediriger
vers un fichier?



commande (arguments) >fichier 2>&1

redirige la sortie standard et l'erreur standard vers fichier. Mais si ton
programme écrit ailleurs que sur la sortie standard et l'erreur standard,
une redirection shell n'y changera rien...

Manuel.
Avatar
Paul Gaborit
À (at) Wed, 27 Aug 2008 15:11:30 +0200,
Guillaume GOURDIN écrivait (wrote):
j'ai le code suivant:

system("blablabla 2>&1 /tmp/tmp.log");

Je m'attends à ce que toutes les sorties soient redigirées vers le
fichier de log, mais il semble que ce ne soit pas le cas. Que faut-il
faire pour capter TOUTES les sorties d'un programme et les rediriger
vers un fichier?



Ce n'est pas vraiment un problème de Perl mais plutôt un problème de
redirection via le shell (auquel, malheureusement, doit faire appel
'system' pour les gérer).

La solution la plus rapide (à écrire) :

system("blablabla > /tmp/tmp.log 2>&1");

La solution la plus propre consisterait à faire un fork avec Perl,
puis, dans le processus fils, faire les redirections voulues (toujours
en Perl) et finir par le exec de 'blablabla' tandis que le processus
père attend la fin du fils...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>