PDA

View Full Version : recupérer dans une variable une valeur affichée à l'écran


guilhem46
03-14-2006, 07:15 PM
Bonjour, c'est encore et tjrs moi dsl... :(
Voila je lance en perl un petit prog en c (il s'appel ess) qui affiche tout simplement "coucou" à l'ecran j'utilise

$prog=system("/home/lpaii/Desktop/ess");


J'aimerais pouvoir récupérer cette chaine de caractères sans passer par un fichier texte. Je sais que cela fonctionne:

$prog=system("/home/lpaii/Desktop/ess >gui.txt");


J'ai essayé de faire

$prog=system("/home/lpaii/Desktop/ess");
$chaine=<STDOUT>;

mais cela ne fonctionne pas est ce que quelqu'un à une idée?j 'ai pas mal cherché mais je n'ai rien trouvé
merci d'avance
@bientot

pepito
03-14-2006, 07:32 PM
$pid=system($f, "/home/lpaii/Desktop/ess |");
while (<f>) {
print $_;
}

C'est de mémoire...
Le truc c'est le pipe | à la fin de la commande à ne pas oublier![/code]

guilhem46
03-14-2006, 07:51 PM
Merci pepito
Mais ca marche pas :(
@ bientot

templuche
03-14-2006, 07:58 PM
Bonsoir,

Essaye plutôt open:
open(FIC1,"/home/lpaii/Desktop/ess|");
while (<FIC1>) {
...
}

wistof
03-14-2006, 08:30 PM
Hello,

tu peux essayer ça aussi :

$_ = `/home/lpaii/Desktop/ess`;
et après tu traite $_

pepito
03-15-2006, 09:54 AM
ah oui pardon c'etait open(...) pas system(...)

DonKiShoot
03-15-2006, 11:00 AM
Exemple pour un de mes scripts :

$netbiosname = qx(nmblookup -A $ip | grep \'<03>\' | awk \'{print \$1}\');

templuche
03-15-2006, 11:52 AM
Bonjour,
$netbiosname = qx(nmblookup -A $ip | grep \'<03>\' | awk \'{print \$1}\');

Là tu utilises Perl pour lancer une commande. C'est OK. Cependant, tu utilises ensuite les outils grep et awk. Pourquoi ne pas remplacer l'appel à grep et awk par du code Perl? Ce serait plus rapide et plus efficace. Voire plus simple. :)

DonKiShoot
03-15-2006, 12:47 PM
A vrai dire, je fais ce que je peux :lol:

De plus, je ne suis pas sure que ce soit beaucoup plus rapide de passé par une analyse en perl étant donné que les commandes auxquelles je fait appel sont des binaires (non interprété de mon point de vu).

templuche
03-15-2006, 01:50 PM
De plus, je ne suis pas sure que ce soit beaucoup plus rapide de passé par une analyse en perl étant donné que les commandes auxquelles je fait appel sont des binaires (non interprété de mon point de vu).
Disons que là tu fais 3 forks en passant les résultats dans des pipes. De plus, Perl passe par une étape de compilation intermédiaire. ce qui fait qu'il "n'est pas si lent que ça". Bref, c'est du détail
:wink:

guilhem46
03-18-2006, 04:20 PM
Merci, pepito et templuche cela fonctionne parfaitement :

open(FIC1,"/home/lpaii/Desktop/ess|");
while (<FIC1>) {
...
}


Mais il reste encore un soucis. Mon plugin récupère les données de température dans la trame pour les mettres dans des variables.Quand mon plugin utilise un fichier pour compléter les varaiables elles sont affichées sous Oreon sans problème par contre quand j'utilise cette partie de code les valeurs récupérées ne sont pas affichées sous Oreon alors que dans le shell cela fonctionne parfaitement avec les 2 méthodes.
Bizarre...
@bientot

wistof
03-19-2006, 06:22 PM
Hello,

qu'est ce qui s'affiche dans Oreon ?

est que tu fait plusieurs "print" dans ton plugin ?
nagios ne parse pas les sorties multilignes.