Je n'arrive pas =E0 rediriger STDOUT sur un fichier sans l'=E9craser et
ensuite de r=E9ouvrir STDOUT sur la sortie standard
Je travaille sur Windows & Unix. Mes tests s'effectuent pour le moment
sous Windows.
Voici ce que j'ai essay=E9 comme redirection:
open (LOGCMD, ">> $logModelFile");
open (SAVEOUT, ">&STDOUT"); # idem avec STDERR
close STDOUT; # idem avec STDERR
open(STDOUT, ">> LOGCMD"); # idem avec STDERR
select(STDOUT); $| =3D 1; # idem avec STDERR
# blablabla
my $resCmd =3D Win32::Process::Create($proc, $fullCmd, $cmd, 1,
NORMAL_PRIORITY_CLASS, "$chDir");
print STDOUT "Test sortie dans fichier =3D> KO\n";
close STDOUT; # idem avec STDERR
open (STDOUT, ">&SAVEOUT"); # idem avec STDERR
close LOGCMD;
print STDOUT "Test sortie sur la sortie standard =3D>OK \n";
print STDERR "Test sortie d'erreur dans le fichier =3D> KO\n";
A la suite de ses commandes, mon fichier est devenu et reste vide,
toutes mes redirections sont sur la sortie standard STDOUT.
Note:
J'ai fait la meme redirection avec la sortie d'erreur standard sans la
redirection STDOUT, =E7a fonctionne parfaitement.
Je ne comprends pas pourquoi pour la sortie standard STDOUT, =E7a
coince.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Dav'
Salut,
J'ai eu des problemes avec ce genre de chose sous windows .
Si je comprends bien ce que tu veux faire tu cherche à capturer la sortie standard d'un process windows créé par le script Perl . Pour cela je te propose d'essayer Win32::Job , qui est standard dans ActiveState Perl 5.8 .
Comme ils disent dans la doc :
Tu fais un : my $job = Win32::Job->new;
Et ensuite : spawn($exe, $args, %opts);
Dans %opts tu peux avoir une clé stdout et :
stdout An open output filehandle or filename (will be opened for append). The resulting filehandle will be used for the child's standard output handle.
De plus :
By default, the child process shares the parent's standard output.
Ce qui devrait bien t'arranger !
Dav'
Bonjour à tous,
Je n'arrive pas à rediriger STDOUT sur un fichier sans l'écraser et ensuite de réouvrir STDOUT sur la sortie standard
Je travaille sur Windows & Unix. Mes tests s'effectuent pour le moment sous Windows.
Voici ce que j'ai essayé comme redirection: open (LOGCMD, ">> $logModelFile"); open (SAVEOUT, ">&STDOUT"); # idem avec STDERR close STDOUT; # idem avec STDERR open(STDOUT, ">> LOGCMD"); # idem avec STDERR select(STDOUT); $| = 1; # idem avec STDERR # blablabla my $resCmd = Win32::Process::Create($proc, $fullCmd, $cmd, 1, NORMAL_PRIORITY_CLASS, "$chDir"); print STDOUT "Test sortie dans fichier => KOn"; close STDOUT; # idem avec STDERR open (STDOUT, ">&SAVEOUT"); # idem avec STDERR close LOGCMD; print STDOUT "Test sortie sur la sortie standard =>OK n"; print STDERR "Test sortie d'erreur dans le fichier => KOn";
A la suite de ses commandes, mon fichier est devenu et reste vide, toutes mes redirections sont sur la sortie standard STDOUT.
Note: J'ai fait la meme redirection avec la sortie d'erreur standard sans la redirection STDOUT, ça fonctionne parfaitement. Je ne comprends pas pourquoi pour la sortie standard STDOUT, ça coince.
Que dois-je écrire? Merci d'avance
Salut,
J'ai eu des problemes avec ce genre de chose sous windows .
Si je comprends bien ce que tu veux faire tu cherche à capturer la
sortie standard d'un process windows créé par le script Perl . Pour
cela je te propose d'essayer Win32::Job , qui est standard dans
ActiveState Perl 5.8 .
Comme ils disent dans la doc :
Tu fais un :
my $job = Win32::Job->new;
Et ensuite :
spawn($exe, $args, %opts);
Dans %opts tu peux avoir une clé stdout et :
stdout
An open output filehandle or filename (will be opened for append). The
resulting filehandle will be used for the child's standard output
handle.
De plus :
By default, the child process shares the parent's standard output.
Ce qui devrait bien t'arranger !
Dav'
Bonjour à tous,
Je n'arrive pas à rediriger STDOUT sur un fichier sans l'écraser et
ensuite de réouvrir STDOUT sur la sortie standard
Je travaille sur Windows & Unix. Mes tests s'effectuent pour le moment
sous Windows.
Voici ce que j'ai essayé comme redirection:
open (LOGCMD, ">> $logModelFile");
open (SAVEOUT, ">&STDOUT"); # idem avec STDERR
close STDOUT; # idem avec STDERR
open(STDOUT, ">> LOGCMD"); # idem avec STDERR
select(STDOUT); $| = 1; # idem avec STDERR
# blablabla
my $resCmd = Win32::Process::Create($proc, $fullCmd, $cmd, 1,
NORMAL_PRIORITY_CLASS, "$chDir");
print STDOUT "Test sortie dans fichier => KOn";
close STDOUT; # idem avec STDERR
open (STDOUT, ">&SAVEOUT"); # idem avec STDERR
close LOGCMD;
print STDOUT "Test sortie sur la sortie standard =>OK n";
print STDERR "Test sortie d'erreur dans le fichier => KOn";
A la suite de ses commandes, mon fichier est devenu et reste vide,
toutes mes redirections sont sur la sortie standard STDOUT.
Note:
J'ai fait la meme redirection avec la sortie d'erreur standard sans la
redirection STDOUT, ça fonctionne parfaitement.
Je ne comprends pas pourquoi pour la sortie standard STDOUT, ça
coince.
J'ai eu des problemes avec ce genre de chose sous windows .
Si je comprends bien ce que tu veux faire tu cherche à capturer la sortie standard d'un process windows créé par le script Perl . Pour cela je te propose d'essayer Win32::Job , qui est standard dans ActiveState Perl 5.8 .
Comme ils disent dans la doc :
Tu fais un : my $job = Win32::Job->new;
Et ensuite : spawn($exe, $args, %opts);
Dans %opts tu peux avoir une clé stdout et :
stdout An open output filehandle or filename (will be opened for append). The resulting filehandle will be used for the child's standard output handle.
De plus :
By default, the child process shares the parent's standard output.
Ce qui devrait bien t'arranger !
Dav'
Bonjour à tous,
Je n'arrive pas à rediriger STDOUT sur un fichier sans l'écraser et ensuite de réouvrir STDOUT sur la sortie standard
Je travaille sur Windows & Unix. Mes tests s'effectuent pour le moment sous Windows.
Voici ce que j'ai essayé comme redirection: open (LOGCMD, ">> $logModelFile"); open (SAVEOUT, ">&STDOUT"); # idem avec STDERR close STDOUT; # idem avec STDERR open(STDOUT, ">> LOGCMD"); # idem avec STDERR select(STDOUT); $| = 1; # idem avec STDERR # blablabla my $resCmd = Win32::Process::Create($proc, $fullCmd, $cmd, 1, NORMAL_PRIORITY_CLASS, "$chDir"); print STDOUT "Test sortie dans fichier => KOn"; close STDOUT; # idem avec STDERR open (STDOUT, ">&SAVEOUT"); # idem avec STDERR close LOGCMD; print STDOUT "Test sortie sur la sortie standard =>OK n"; print STDERR "Test sortie d'erreur dans le fichier => KOn";
A la suite de ses commandes, mon fichier est devenu et reste vide, toutes mes redirections sont sur la sortie standard STDOUT.
Note: J'ai fait la meme redirection avec la sortie d'erreur standard sans la redirection STDOUT, ça fonctionne parfaitement. Je ne comprends pas pourquoi pour la sortie standard STDOUT, ça coince.