Ecrire un log avec nom similaire au STDOUT (choisi par l'usager)
5 réponses
Patrick
Bonjour,
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques
arguments, tout en dirigeant les resultats vers le fichier d'output de
son choix.
S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager
veut sauvegarder son output et lui creer un log dans le meme repertoire
et sous un nom se rapprochant, a savoir: MonResultat.log
(log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye
le STDOUT?
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye le STDOUT?
A priori non, puisque c'est le shell qui s'occupe du branchement.
Une solution serait d'avoir une option « -o MonResultat.txt » au lieu d'utiliser la redirection par le shell.
-- Jérémy JUST
Paul Gaborit
À (at) 5 Jul 2005 14:15:51 -0700, "Patrick" écrivait (wrote):
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques arguments, tout en dirigeant les resultats vers le fichier d'output de son choix. S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager veut sauvegarder son output et lui creer un log dans le meme repertoire et sous un nom se rapprochant, a savoir: MonResultat.log (log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye le STDOUT?
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de savoir ce qu'est vraiment STDOUT. L'utilisateur peut faire :
MonProgramme.pl > /dev/null
Allez-vous créer un fichier dans le répertoire /dev ?
MonProgramme.pl | more
Et là, où comptez-vous créer le fichier de log ? Et sous quel nom ?
Et si le fichier "MonResultat.txt" est en fait un lien ou pipe...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques
arguments, tout en dirigeant les resultats vers le fichier d'output de
son choix.
S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager
veut sauvegarder son output et lui creer un log dans le meme repertoire
et sous un nom se rapprochant, a savoir: MonResultat.log
(log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye
le STDOUT?
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de
savoir ce qu'est vraiment STDOUT. L'utilisateur peut faire :
MonProgramme.pl > /dev/null
Allez-vous créer un fichier dans le répertoire /dev ?
MonProgramme.pl | more
Et là, où comptez-vous créer le fichier de log ? Et sous quel nom ?
Et si le fichier "MonResultat.txt" est en fait un lien ou pipe...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 5 Jul 2005 14:15:51 -0700, "Patrick" écrivait (wrote):
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques arguments, tout en dirigeant les resultats vers le fichier d'output de son choix. S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager veut sauvegarder son output et lui creer un log dans le meme repertoire et sous un nom se rapprochant, a savoir: MonResultat.log (log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye le STDOUT?
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de savoir ce qu'est vraiment STDOUT. L'utilisateur peut faire :
MonProgramme.pl > /dev/null
Allez-vous créer un fichier dans le répertoire /dev ?
MonProgramme.pl | more
Et là, où comptez-vous créer le fichier de log ? Et sous quel nom ?
Et si le fichier "MonResultat.txt" est en fait un lien ou pipe...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
DoMinix
Bonjour,
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques arguments, tout en dirigeant les resultats vers le fichier d'output de son choix. S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager veut sauvegarder son output et lui creer un log dans le meme repertoire et sous un nom se rapprochant, a savoir: MonResultat.log (log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye le STDOUT?
A l'avance merci!
Patrick
c'est plus du perl mais bon ... une alternative : tu peut envoyer ton log sur STDERR et l'usager n'aura qu'a taper moscript.pl arg arg >monresult 2>monlog
-- dominix
Bonjour,
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques
arguments, tout en dirigeant les resultats vers le fichier d'output de
son choix.
S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager
veut sauvegarder son output et lui creer un log dans le meme repertoire
et sous un nom se rapprochant, a savoir: MonResultat.log
(log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye
le STDOUT?
A l'avance merci!
Patrick
c'est plus du perl mais bon ... une alternative :
tu peut envoyer ton log sur STDERR et l'usager n'aura qu'a taper
moscript.pl arg arg >monresult 2>monlog
j'ai un pgm Perl tout simple que l'usager peut appeller avec quelques arguments, tout en dirigeant les resultats vers le fichier d'output de son choix. S'il tape:
MonProgramme.pl arg1 arg2 arg3 > MonResultat.txt
j'aimerais bien, dans mon pgm Perl, "comprendre" ou l'usager veut sauvegarder son output et lui creer un log dans le meme repertoire et sous un nom se rapprochant, a savoir: MonResultat.log (log qui contiendra quelques messages pas tjrs d'interet national!)
Y a-t-il moyen, en Perl, de "capturer" le nom du fichier ou sera envoye le STDOUT?
A l'avance merci!
Patrick
c'est plus du perl mais bon ... une alternative : tu peut envoyer ton log sur STDERR et l'usager n'aura qu'a taper moscript.pl arg arg >monresult 2>monlog
-- dominix
Jérémy JUST
On Wed, 06 Jul 2005 00:58:06 +0200 Paul Gaborit wrote:
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de savoir ce qu'est vraiment STDOUT.
J'ai répondu la même chose, mais c'est faux. Le programme n'est pas au courant, mais il peut le demander à l'OS (ça veut dire que ça ne sera pas portable).
Par exemple sous Linux, il suffit d'aller regarder dans /proc/PID/fd (où PID est le numéro du processus). Ce répertoire contient un lien symboliques par descripteur de fichier (0, 1 et 2 étant STDIN, STDOUT et STDERR). Par exemple:
Dans ce cas, on voit un lien symbolique vers « pipe:[45776] ». Je n'ai pas cherché si c'était utilisable.
-- Jérémy JUST
On Wed, 06 Jul 2005 00:58:06 +0200
Paul Gaborit <Paul.Gaborit@invalid.invalid> wrote:
Ce n'est pas possible tout simplement parce que vous n'avez aucun
moyen de savoir ce qu'est vraiment STDOUT.
J'ai répondu la même chose, mais c'est faux. Le programme n'est pas au
courant, mais il peut le demander à l'OS (ça veut dire que ça ne sera
pas portable).
Par exemple sous Linux, il suffit d'aller regarder dans /proc/PID/fd
(où PID est le numéro du processus). Ce répertoire contient un lien
symboliques par descripteur de fichier (0, 1 et 2 étant STDIN, STDOUT
et STDERR).
Par exemple:
On Wed, 06 Jul 2005 00:58:06 +0200 Paul Gaborit wrote:
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de savoir ce qu'est vraiment STDOUT.
J'ai répondu la même chose, mais c'est faux. Le programme n'est pas au courant, mais il peut le demander à l'OS (ça veut dire que ça ne sera pas portable).
Par exemple sous Linux, il suffit d'aller regarder dans /proc/PID/fd (où PID est le numéro du processus). Ce répertoire contient un lien symboliques par descripteur de fichier (0, 1 et 2 étant STDIN, STDOUT et STDERR). Par exemple:
Dans ce cas, on voit un lien symbolique vers « pipe:[45776] ». Je n'ai pas cherché si c'était utilisable.
-- Jérémy JUST
Paul Gaborit
À (at) Fri, 8 Jul 2005 21:51:26 +0200, Jérémy JUST écrivait (wrote):
On Wed, 06 Jul 2005 00:58:06 +0200 Paul Gaborit wrote:
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de savoir ce qu'est vraiment STDOUT.
J'ai répondu la même chose, mais c'est faux. Le programme n'est pas au courant, mais il peut le demander à l'OS (ça veut dire que ça ne sera pas portable).
[...des exemples de contenu de /proc sous linux...]
Outre le fait que c'est effectivement dépendant de l'OS, ça ner servira pas à grand chose à mon avis... Dans le cas suivant par exemple :
MonProg.pl | rsh unautremachine "...."
Là, le fichier final (si il existe) est sur une autre machine !!!
Tout ça pour dire que ce n'est certainement pas une bonne piste d'essayer de savoir (automatiquement) ce vers quoi envoie STDOUT.
En fait, plutôt que de demander à l'OS, le plus fiable est de le demander à l'utilisateur. Lui sait ce qu'il veut faire. Le meilleur moment pour lui demander ce n'est pas lorsque le programme tourne déjà mais juste à son lancement, par exemple, via une option de la ligne de commande. Et on en revient aux solutions initiales...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 8 Jul 2005 21:51:26 +0200,
Jérémy JUST <jeremy_just@netcourrier.com> écrivait (wrote):
On Wed, 06 Jul 2005 00:58:06 +0200
Paul Gaborit <Paul.Gaborit@invalid.invalid> wrote:
Ce n'est pas possible tout simplement parce que vous n'avez aucun
moyen de savoir ce qu'est vraiment STDOUT.
J'ai répondu la même chose, mais c'est faux. Le programme n'est pas au
courant, mais il peut le demander à l'OS (ça veut dire que ça ne sera
pas portable).
[...des exemples de contenu de /proc sous linux...]
Outre le fait que c'est effectivement dépendant de l'OS, ça ner
servira pas à grand chose à mon avis... Dans le cas suivant par
exemple :
MonProg.pl | rsh unautremachine "...."
Là, le fichier final (si il existe) est sur une autre machine !!!
Tout ça pour dire que ce n'est certainement pas une bonne piste
d'essayer de savoir (automatiquement) ce vers quoi envoie STDOUT.
En fait, plutôt que de demander à l'OS, le plus fiable est de le
demander à l'utilisateur. Lui sait ce qu'il veut faire. Le meilleur
moment pour lui demander ce n'est pas lorsque le programme tourne déjà
mais juste à son lancement, par exemple, via une option de la ligne de
commande. Et on en revient aux solutions initiales...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 8 Jul 2005 21:51:26 +0200, Jérémy JUST écrivait (wrote):
On Wed, 06 Jul 2005 00:58:06 +0200 Paul Gaborit wrote:
Ce n'est pas possible tout simplement parce que vous n'avez aucun moyen de savoir ce qu'est vraiment STDOUT.
J'ai répondu la même chose, mais c'est faux. Le programme n'est pas au courant, mais il peut le demander à l'OS (ça veut dire que ça ne sera pas portable).
[...des exemples de contenu de /proc sous linux...]
Outre le fait que c'est effectivement dépendant de l'OS, ça ner servira pas à grand chose à mon avis... Dans le cas suivant par exemple :
MonProg.pl | rsh unautremachine "...."
Là, le fichier final (si il existe) est sur une autre machine !!!
Tout ça pour dire que ce n'est certainement pas une bonne piste d'essayer de savoir (automatiquement) ce vers quoi envoie STDOUT.
En fait, plutôt que de demander à l'OS, le plus fiable est de le demander à l'utilisateur. Lui sait ce qu'il veut faire. Le meilleur moment pour lui demander ce n'est pas lorsque le programme tourne déjà mais juste à son lancement, par exemple, via une option de la ligne de commande. Et on en revient aux solutions initiales...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>