|
|
|
|
Davlar, le lundi 26 novembre 2007 à 20:03:57Configuration: Windows XP Firefox 2.0.0.9
Salut,
la fonction select te conviens? lami20j@debserv:~/trash$ cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;
open FIC,">journal.txt"
or die "E/S : $!\n";
print "J'écrit sur STDOUT\n";
my $sortie = select(FIC);
print "Hello, j'écrit dans FIC \n";
select($sortie);
print "J'écrit à nouveau sur STDOUT\n";
__END__l'exécutionlami20j@debserv:~/trash$ perl ccm.pl J'écrit sur STDOUT J'écrit à nouveau sur STDOUT lami20j@debserv:~/trash$ cat journal.txt Hello, j'écrit dans FIC lami20j |
Ouin,
Marche pas. L'idée était bonne mais le problème c'est que ça ne fonctionne pas dans les print devant d'un open ou open2 open (ORA, "| sqlplus $p_connect_string") || die ("Can't pipe to sqlplus: $!"); print ORA "set pagesize 0 linesize 1000 feedback off ver off heading off echo on trimspool on termout on\n"; for ($ix = 0; $ix < $z_numArgs; $ix++) { my $z_scr_out = $t_obj_a_compiler[$z_counter]; print ORA "spool pof.txt;\n"; print ORA "@ $z_dossier/$z_scr_out\n"; print ORA "spool off;\n"; } Comme le print est affecté sur un "FILEHANDLER", le select ne le voit pas. Et quand je tente de le re-rediriger bien effectivement il n'aime pas beaucoup ça -> bad interpreter: Fichier texte occupé. PS Quand même très intéressant cette commande, je ne la connaissais pas. Dave |
as-tu essayé de faire close(ORA); print "maintenant c'est sur stdout\n";ou écrire sur STDOUT de cette manière print STDOUT "j'écris sur stdout\n";? lami20j
|
Salut,
A quand la commande noprint :-( Ben, il n'y a pas besoin ;-)) Quand on veut afficher on utilise print et quand on ne veux pas alors on ne l'utilise pas ;-DD Bon, revenons à ton problème. J'aimerai bien que tu me dit quand tu veux écrire sur STDOUT et quand tu veux écrire dans ORA, puisque je ne suis pas sûr d'avoir compris ce que tu veux. lami20j |
Merci de ton aide.
Ok voici un explication avec exemple concrète. Je reprend en exemple la partie de code suivant: open (ORA, "| sqlplus $p_connect_string") || die ("Can't pipe to sqlplus: $!"); print ORA "set pagesize 0 linesize 1000 feedback off ver off heading off echo on trimspool on termout on\n"; for ($ix = 0; $ix < $z_numArgs; $ix++) { my $z_scr_out = $t_obj_a_compiler[$z_counter]; print ORA "spool pof.txt;\n"; print ORA "@ $z_dossier/$z_scr_out\n"; print ORA "spool off;\n"; } Close(ORA); La commande print est utilisé dans le cas présent afin d'envoyer des commande au programme sqlplus à travers le open. Ces commandes je ne les voies pas à l'affichage et cette partie fonctionne bien. Le programme sqlplus retourne par contre par lui même du OUTPUT (au terminal). Ce OUTPUT qui vient du programme, je veux le capturer et le renvoyer vers un fichier, c'est pourquoi que je pensais que la commande STDOUT->fdopen(\*OUTPUT, "w"); était un bon choix (Mais je ne peux revenir par la suite à mon terminal (ou à l'état initiale de STDOUT)). Je veux que le client voit ceci à son écran: Resultat de la compilation Module Programme Status ========== ============================================= ======== sql vi_usage_tol.sql OK Mais pour le moment il reçoit: Resultat de la compilation Module Programme Status ========== ============================================= ======== SQL*Plus: Release 10.1.0.5.0 - Production on Lun. Nov. 26 12:00:23 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connecté à : Oracle Database 10g Release 10.2.0.3.0 - Production SQL> SQL> SQL> SQL> -- Vue qui regroupe les informations des usages d'imputations SQL> -- bla bla bla bla bla SQL> SQL> sql vi_usage_tol.sql OK Donc Je cherche un moyen de conserver ces messages mais pas les avoir dans mon afficheur. Bref "trip de pouvoir" je veux tout géré ce qui vient à mon écran et décider ou ça s'en va. Dave |
J'ai trouvé!!
# Saving STDOUT open(OLDOUT,">&STDOUT") || die("[$PROGNAME] Couldn't dup STDOUT\n"); # <- Sauvegarder l'origine du STDOUT # Redirecting STDOUT to file close(STDOUT); # Fermeture du STDOUT actuel open(STDOUT,">perl.out"); # Redirection du STDOUT vers un journal (log) print "CMD: $cmd\n"; # Tous les print ou retour vons dans le journal # Restore STDOUT close(STDOUT); # On referme le STDOUT open(STDOUT,">&OLDOUT"); # On récupère le terminal d'origine (Bref on retourne à l'écran) Bref avec cela il est possible contrôler à souhait et aussi souvent que l'on veut l'affichage du programme perl. Référence: http://www.issociate.de/... Merci pour l'aide. Dave. |