[PERL] - diff d'une sortie d'un programme
Résolu
EverDraft
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
EverDraft Messages postés 24 Date d'inscription Statut Membre Dernière intervention -
EverDraft Messages postés 24 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je programme en ce moment un Shell et pour tester mes fonctions je me suis mis au perl. Ce language etant plus puissant que le script shell j'essaie de le maitriser. Mais voila j'ai un souci pour faire la diff de mes sortie d'execution.
Pour lancer mon binaire j'utilise la fonction system() mais je n'arrive pas a faire de diff.
Lorsque j'essaie
if (print(system("../42SH --version")) eq "42sh version is 0.5\n")
{
print("OK\n");
}
else
{
print("KO\n");
}
des zero s'affiche avant ma diff et j'ai droit a un KO a chaque fois meme si ma sortie est bonne.
Si quelqu'un peut m'aider je lui en serais infiniment reconnaissant.
Merci ;)
Je programme en ce moment un Shell et pour tester mes fonctions je me suis mis au perl. Ce language etant plus puissant que le script shell j'essaie de le maitriser. Mais voila j'ai un souci pour faire la diff de mes sortie d'execution.
Pour lancer mon binaire j'utilise la fonction system() mais je n'arrive pas a faire de diff.
Lorsque j'essaie
if (print(system("../42SH --version")) eq "42sh version is 0.5\n")
{
print("OK\n");
}
else
{
print("KO\n");
}
des zero s'affiche avant ma diff et j'ai droit a un KO a chaque fois meme si ma sortie est bonne.
Si quelqu'un peut m'aider je lui en serais infiniment reconnaissant.
Merci ;)
A voir également:
- [PERL] - diff d'une sortie d'un programme
- Remettre un pc en sortie d'usine - Guide
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
4 réponses
Salut,
Si tu veux capturer le résultat d'une commande il faut utiliser plutôt qx// au lieu de system()
voici un exemple qui pourra peut être t'aider
Exécution
Si tu veux capturer le résultat d'une commande il faut utiliser plutôt qx// au lieu de system()
voici un exemple qui pourra peut être t'aider
#!/usr/bin/perl use strict;use warnings; my $cmd = qx/sh --version | head -1/; print "$cmd\n"; if (qx/sh --version | head -1/ eq "GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)\n"){ print "OK\n"; }else{ print "KO\n"; } __END__
Exécution
lami20j@debian:~/trash$ perl ccm.pl GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu) OK
Merci pour ta reponse mais mon probleme persiste toujours,
avec tes conseils j'ai essaye mais j'obtiens:
"Can't exec "qx/../42sh": No such file or directory at ./moulette.pl line 80.
Use of uninitialized value in concatenation (.) or string at ./moulette.pl line 81."
j'ai juste modifie "qx/sh" par "qx/../42sh":
my $cmd = `qx/../42sh --version | head -1/`;
print "$cmd\n";
if ("qx/../42sh --version | head -1/" eq "42sh version is 0.5\n"){
print "OK\n";
}else{
print "KO\n";
}
Si tu pense savoir d'ou viens le probleme je cherche toujours...
En tout cas merci quand meme.
avec tes conseils j'ai essaye mais j'obtiens:
"Can't exec "qx/../42sh": No such file or directory at ./moulette.pl line 80.
Use of uninitialized value in concatenation (.) or string at ./moulette.pl line 81."
j'ai juste modifie "qx/sh" par "qx/../42sh":
my $cmd = `qx/../42sh --version | head -1/`;
print "$cmd\n";
if ("qx/../42sh --version | head -1/" eq "42sh version is 0.5\n"){
print "OK\n";
}else{
print "KO\n";
}
Si tu pense savoir d'ou viens le probleme je cherche toujours...
En tout cas merci quand meme.
Salut,
utilise le chemin absolu
comme la séparation des répertoires est faite avec des slash alors qx// ne vas rien comprendre puisque après le 2 slash Perl va croire qu'il doit lire une commande
Donc en ce cas tu peut faire comme ça
- mettre un backslash avet chaque slash à l'intérieur de qx//
lami20j
utilise le chemin absolu
comme la séparation des répertoires est faite avec des slash alors qx// ne vas rien comprendre puisque après le 2 slash Perl va croire qu'il doit lire une commande
Donc en ce cas tu peut faire comme ça
- mettre un backslash avet chaque slash à l'intérieur de qx//
qx/\/chemin\/vers\/commande/- utilise un autre séparateur pour qx
qx[/chemin/vers/commande] qx(/chemin/vers/commande) qx{/chemin/vers/commande}--
lami20j