Perl STDOUT redirection et retour au défaut.
Fermé
Davlar
-
26 nov. 2007 à 20:03
davlar Messages postés 75 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 11 mai 2009 - 27 nov. 2007 à 18:06
davlar Messages postés 75 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 11 mai 2009 - 27 nov. 2007 à 18:06
A voir également:
- Perl STDOUT redirection et retour au défaut.
- Retour à la ligne excel - Guide
- Retour arrière clavier - Guide
- Windows 11 clic droit afficher plus d'options par défaut - Guide
- Google page d'accueil par défaut - Guide
- Télécharger étiquette retour freebox - Forum Freebox
6 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
26 nov. 2007 à 21:11
26 nov. 2007 à 21:11
Salut,
la fonction select te conviens?
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
davlar
Messages postés
75
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
11 mai 2009
57
26 nov. 2007 à 22:00
26 nov. 2007 à 22:00
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
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
26 nov. 2007 à 22:42
26 nov. 2007 à 22:42
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";?
davlar
Messages postés
75
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
11 mai 2009
57
26 nov. 2007 à 23:10
26 nov. 2007 à 23:10
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
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 nov. 2007 à 09:42
27 nov. 2007 à 09:42
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
davlar
Messages postés
75
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
11 mai 2009
57
27 nov. 2007 à 17:02
27 nov. 2007 à 17:02
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
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
davlar
Messages postés
75
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
11 mai 2009
57
27 nov. 2007 à 18:06
27 nov. 2007 à 18:06
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: https://board.issociate.de/thread/142703/
Merci pour l'aide.
Dave.
# 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: https://board.issociate.de/thread/142703/
Merci pour l'aide.
Dave.