Redirection STDOUT : probleme sous Windows

Le
fafanie
Bonjour tous,

Je n'arrive pas rediriger STDOUT sur un fichier sans l'craser et
ensuite de rouvrir 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 => KO";
close STDOUT; # idem avec STDERR
open (STDOUT, ">&SAVEOUT"); # idem avec STDERR
close LOGCMD;
print STDOUT "Test sortie sur la sortie standard =>OK ";
print STDERR "Test sortie d'erreur dans le fichier => KO";

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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Dav'
Le #15199
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


Publicité
Poster une réponse
Anonyme