[PERL] récupérer un flux ouvert
Résolu/Fermé
A voir également:
- [PERL] récupérer un flux ouvert
- Comment recuperer un message supprimé sur whatsapp - Guide
- Recuperer video youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Impossible de récupérer mon compte gmail - Guide
8 réponses
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
16 août 2007 à 14:06
16 août 2007 à 14:06
Je dirais:
open (FH, "| sqlplus -s user/pswd@Base 2>&1");
tu peux écrire tes requêtes sur FH et il reste ouvert (sqlplus en exécution) tant qu'il n'y a pas de close
open (FH, "| sqlplus -s user/pswd@Base 2>&1");
tu peux écrire tes requêtes sur FH et il reste ouvert (sqlplus en exécution) tant qu'il n'y a pas de close
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
17 août 2007 à 14:48
17 août 2007 à 14:48
Salut,
Si le nom de fichier commence par '|', le nom de fichier est interprété comme une commande vers laquelle seront dirigées les sorties (via un tube -- en anglais pipe) et si le nom de fichier se termine par '|', le nom de fichier est interprété comme une commande dont la sortie sera récupérée
Je te conseille d'utiliser le module DBI, pour exploiter ta base.
Si le nom de fichier commence par '|', le nom de fichier est interprété comme une commande vers laquelle seront dirigées les sorties (via un tube -- en anglais pipe) et si le nom de fichier se termine par '|', le nom de fichier est interprété comme une commande dont la sortie sera récupérée
Je te conseille d'utiliser le module DBI, pour exploiter ta base.
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
14 août 2007 à 18:59
14 août 2007 à 18:59
Salut,
affiche ton script
affiche ton script
salut, oui je ne l'ai pas écrit car il est des plus basic. En gros c'est cela que je fais:
_______________________________________
#!/usr/bin/perl
my $command = `sqlplus -s user/pswd@Base << EOF 2>&1
#ici je lance ma requete...
EOF`;
#ici je récupère ma variable $command et je fais un traitement dessus, en fonction du résultat, je rouvre une autre requete sur la même base.
my $command2=`sqlplus -s user/pswd@Base << EOF 2>&1
#traitement a nouveau
EOF`;
________________________________________
En gros j'ouvre 2 requêtes et entre les 2 je fais un traitement... J'aurais souhaité savoir si je pouvais ne pas fermer ma première requête (du genre la mettre en arriere plan), faire un traitement de données puis récupérer la requête ouverte...
Toutes suggestions sont les bienvenues!
_______________________________________
#!/usr/bin/perl
my $command = `sqlplus -s user/pswd@Base << EOF 2>&1
#ici je lance ma requete...
EOF`;
#ici je récupère ma variable $command et je fais un traitement dessus, en fonction du résultat, je rouvre une autre requete sur la même base.
my $command2=`sqlplus -s user/pswd@Base << EOF 2>&1
#traitement a nouveau
EOF`;
________________________________________
En gros j'ouvre 2 requêtes et entre les 2 je fais un traitement... J'aurais souhaité savoir si je pouvais ne pas fermer ma première requête (du genre la mettre en arriere plan), faire un traitement de données puis récupérer la requête ouverte...
Toutes suggestions sont les bienvenues!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
16 août 2007 à 12:23
16 août 2007 à 12:23
Hello
utiliser open qui retourne un "file handle"
http://www.sunsite.ualberta.ca/Documentation/Misc/perl-5.6.1/pod/perlfunc/open.html
ensuite je peux accéder au file handle de mon choix, si j'ai ouvert plusieurs fichiers/processes
utiliser open qui retourne un "file handle"
http://www.sunsite.ualberta.ca/Documentation/Misc/perl-5.6.1/pod/perlfunc/open.html
ensuite je peux accéder au file handle de mon choix, si j'ai ouvert plusieurs fichiers/processes
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
16 août 2007 à 12:36
16 août 2007 à 12:36
Salut,
et pourquoi ne fait tu comme ça
et pourquoi ne fait tu comme ça
my $command = `sqlplus -s user/pswd@Base << EOF 2>&1 # ici tu lance la requête globale que tu la sauvagerde # dans un fichier temporaire # ensuite tu vas utilser un handle pour # traiter les infos # pour faciliter il faut # bien faire la rédirection vers le fichier temporaire # en utilisant un champ de séparation... EOF`; # ici open REQUETE, "$requete_tmp" or die "E/S : $!\n"; while (<REQUETE>){ # traitement } # suppression fichier temporaire unlink ($requete_tmp);
rebonjour,
oui j'avais effectivement penser à cette solution mais j'aurais préféré éviter d'écrire sur un fichier...Merci en tout cas pour vos idées.
Mais en gros, n'est-il pas possible de laisser le flux ouvert et de le récupérer? car lorsque je fais mon appel à ma variable $command, je fais un appel système... ensuite je traite ... et je refais un autre appel système...
n'y a-t-il pas un moyen de ne faire qu'un seul appel système (sans passer par la redirection vers un fichier)? Peut-être ce que je demande n'est pas possible...
Merci d'avance
oui j'avais effectivement penser à cette solution mais j'aurais préféré éviter d'écrire sur un fichier...Merci en tout cas pour vos idées.
Mais en gros, n'est-il pas possible de laisser le flux ouvert et de le récupérer? car lorsque je fais mon appel à ma variable $command, je fais un appel système... ensuite je traite ... et je refais un autre appel système...
n'y a-t-il pas un moyen de ne faire qu'un seul appel système (sans passer par la redirection vers un fichier)? Peut-être ce que je demande n'est pas possible...
Merci d'avance
ok merci nikel, c'est exactement ce qu'il me fallait. Merci à vous 2.
Donc pour ceux qui seraient intéressés:
http://www.journaldunet.com/developpeur/tutoriel/cgi/030127perl_dbi1a.shtml
Donc pour ceux qui seraient intéressés:
http://www.journaldunet.com/developpeur/tutoriel/cgi/030127perl_dbi1a.shtml
16 août 2007 à 14:09
16 août 2007 à 15:04
16 août 2007 à 18:38
Je viens d'essayer ca et je crois bien que c'est la solution que je cherche. Toutefois, j'aurais encore une question (dsl je ne suis pas un pro de perl):
donc je fais ceci:
___________________________________________________
#!/usr/bin/perl
open(FH,"|sqlplus user/pswd@base 2>&1");
#donc ici ma connexion sur "base" est ouverte
#Ensuite je peux donc faire ce que je veux...
print FH "select TABLE from TOTO;";
close(FH);
___________________________________________________
Ceci marche donc bien mais le pb c'est que je souhaiterai récupérer le résultat dans une variable et pouvoir la traiter... avant le close(FH)... Mais a priori, il exécute ma requete (select ... from) seulement lorsque je ferme le descripteur. n'y a t il pas un moyen de récupérer ma requete avant le close?
Merci d'avnce.
17 août 2007 à 14:33
Bon je galère tjrs... En gros le flux est ouvert mais comme dit précédemment, les requêtes que je traite par la suite ne s'exécute uniquement que lors du close(FH). N'y a t il pas un moyen de le faire éxécuter avant de fermer le File Handler?
En gors ci je fais ceci:
_____________________________
open(FH,"|sqlplus user/pswd@base 2>&1;");
# ici ma connexion à ma base est ouverte
# je souhaiterai désormais lancer des requêtes
#requête 1:
print FH "SELECT titi FROM toto;";
print "Hello world!\n";
#requête 2:
print FH "SELECT tata FROM toto;";
print "Pouêt!\n";
close(FH);
-----------------------------
Voici le résultat que j'ai à l'écran (dans l'ordre):
Hello world!
Pouêt!
#Ici j'ai le résultat de ma requête 1
#Ici j'ai le résultat de ma requête 2
_____________________________________________________
En gros, on voit bien que mes 2 requêtes SQL ne s'éxécute uniquement que lors de l'appel au close(FH)... Ma question est donc: peut-on récupérer les requêtes avant d'avoir le close(FH)?
Merci d'avance