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

Redirection STDOUT : probleme sous Windows

1 réponse
Avatar
fafanie
Bonjour =E0 tous,

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.

Que dois-je =E9crire?
Merci d'avance

1 réponse

Avatar
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