rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Perl STDOUT redirection et retour au défaut.

Davlar, le lundi 26 novembre 2007 à 20:03:57
Bonjour,

Actuellement je tente de contrôler le "Output" des print de mon programme perl (5.8).

Je fais plusieurs open et open2 (vers d'autre programmes) je veux que certaines de mes sorties de retour(print ou printf) aillent dans un fichier et certaines autres dans le terminal.

Mais voilà, lorsque je renvoie le STDOUT dans un fichier (STDOUT->fdopen) et que je le ferme le STDOUT ce dernier ne revient jamais à sa valeur de défaut (soit dans le terminal).

Les STDOUT->close, STDOUT->flush, STDOUT->untain et autre ne me permettent jamais de revenir à mon STDOUT de départ.

PS> Je code muti-plateforme donc je peux pas programmes mon retour vers un /dev/pty??


Help .

Dave
Configuration: Windows XP
Firefox 2.0.0.9
Répondre à Davlar  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le lundi 26 novembre 2007 à 21:11:28
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écution
lami20j@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
Répondre à lami20j

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
davlar, le lundi 26 novembre 2007 à 22:00:03
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
Répondre à davlar

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le lundi 26 novembre 2007 à 22:42:20
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
Répondre à lami20j

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
davlar, le lundi 26 novembre 2007 à 23:10:48
Non car le problème n'est pas avant ou après mais dedans mon open ... c'est que ce sont mes print ORA que je veux rediriger l'affichage de retour vers un fichier.

Le select ou la manipulation du STDOUT semblais un bel avenue mais il y'a quelque chose qui ne marche pas et pourtant ce contrôle devrait être possible.

Je peux pas m'imaginer installer Linux et Windows et voir passer tout les lignes de code à mon écran .. Je m'attend à voir plutôt quelque chose du genre : Installation ..... En cours. Et Voir journal pour toute erreur.

A quand la commande noprint :-(

Une autre idée.?

Dave
Répondre à davlar

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le mardi 27 novembre 2007 à 09:42:47
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
Répondre à lami20j

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
davlar, le mardi 27 novembre 2007 à 17:02:42
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
Répondre à davlar

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 davlar, le mardi 27 novembre 2007 à 18:06:36
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.
Répondre à davlar
Redirection, page par défaut non modifiable (Résolu)Bonsoir je n'y connais pas gd chose, mais j'ai un problème de redirection vers des sites non souhaités alors que la liste qui s'affiche est bonne a priori j'ai une page par défaut qui contient "isapi" et "redir" dont je... www.commentcamarche.net/forum/affich-2904140-redirection-page-par-defaut-non-modifiable
Perl - Les fichiers On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles STDIN et STDOUT). Les... www.commentcamarche.net/perl/perlfich.php3
Perl - Entrée et sortie standards Perl permet d'écrire sur la sortie standard, appelée STDOUT et de lire sur l'entrée standard (STDIN). Il s'agit de deux descripteurs fournis par le système d'exploitation et permettant généralement de lire l'entrée du clavier et d'envoyer des données... www.commentcamarche.net/perl/perles.php3
[Bootloader] Dual-boot système par défaut.Dual-boot système par défaut Pour changer le système démarré par défaut suivant votre "bootloader" il vous faut : (toutes ces manipulations sont à exécuter en tant que "root") Pour Lilo Pour Grub Pour Lilo Éditer votre fichier de... www.commentcamarche.net/faq/sujet-1178-bootloader-dual-boot-systeme-par-defaut
[Webmaster] Faire une redirectionLes différentes solutions sont présentées de la meilleure (.htaccess) à la moins bonne (JavaScript). Un .htaccess Le .htaccess est à placer dans le répertoire qui doit être redirigé. On applique une redirection de cette façon : RedirectPermanent... www.commentcamarche.net/faq/sujet-4640-webmaster-faire-une-redirection
Modifier le dossier d'installation par défaut C:\Program FilesPar défaut, l'installation de la plupart des programmes et logiciels se fait dans le dossier C:\Program Files. Pour une raison ou une autre, vous voulez changer ce dossier par un autre (sur une autre partition en cas de problème d'espace disque par... www.commentcamarche.net/faq/sujet-11458-modifier-le-dossier-d-installation-par-defaut-c-program-files
Perl sous windows (Résolu)Bonjour, j'essaie de lancer l'execution d'une liste de programme depuis mon script perl sur windows, mais je ne sais pas comment faire pour que le programme lance retourne le controle a mon script, ce qui fait que mon script attend... www.commentcamarche.net/forum/affich-5974353-perl-sous-windows
Excel : Nvre lignes et colonnes par défaut (Résolu)Bonjour, y'a t-il possibilité de définir par défaut le nombre de lignes et colonnes dans une page excel ? merci pour retour d'info bonne journee Nat www.commentcamarche.net/forum/affich-6818618-excel-nvre-lignes-et-colonnes-par-defaut
Redirection non désirée sur divers sites (Résolu)Bonjour, Comme notifié dans mon sujet, j'ai un pb de redirection automatique par je ne sais quoi. J'ai effectué un scan avec Ad-aware, AVG free et Spybot, à chaque fois je trouve des trojans ou des choses comme ça mais dès que je retourne... www.commentcamarche.net/forum/affich-2234443-redirection-non-desiree-sur-divers-sites
Le jeu vidéo de la semaine : Pokémons version Diamant et Perle(Paris - Relaxnews) - Les Pokémons sont de retour sur la Nintendo DS dès vendredi 27 juillet avec la sortie de nouvelles versions, Diamant et Perle.Dans la peau de Louka ou d'Aurore, le joueur devra trouver un maximum de Pokémon afin de combattre la... www.commentcamarche.net/actualites/le-jeu-video-de-la-semaine-pokemons-version-diamant-et-perle-3292885-actualite.php3
Perl - Introduction Perl (Practical Extraction and Report Language) est un langage de programmation dérivé des scripts shell, créé en 1986 par Larry Wall afin de mettre au point un système de News entre deux réseaux. Il s'agit d'un langage interprété dont l'avantage... www.commentcamarche.net/perl/perlintro.php3
Perl - Les variables Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois types : scalaires tableaux tableaux associatifs (appelés... www.commentcamarche.net/perl/perlvar.php3
Perl - Caractéristiques du langage Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa plus simple expression, sans mise en... www.commentcamarche.net/perl/perlcarac.php3
Toutes les réponses pour « perl STDOUT redirection et retour au défaut. »