[PERL] - diff d'un sortie d'erreur
Résolu/Fermé
EverDraft
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
-
3 déc. 2007 à 12:14
aa - 9 déc. 2007 à 16:23
aa - 9 déc. 2007 à 16:23
A voir également:
- [PERL] - diff d'un sortie d'erreur
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Airpods 3 date de sortie - Guide
- Erreur 5000 france tv - Forum iPhone
10 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
3 déc. 2007 à 14:07
3 déc. 2007 à 14:07
Salut,
la sortie des erreurs se fait sur le descripteur 2
peut être qu'il faut faire une rédirection dans ton code pour le descripteur STDERR
quelque chose de genre
la sortie des erreurs se fait sur le descripteur 2
peut être qu'il faut faire une rédirection dans ton code pour le descripteur STDERR
quelque chose de genre
2>fichier.error
EverDraft
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
1
3 déc. 2007 à 14:38
3 déc. 2007 à 14:38
voila mon code:
my $prm = "../42sh -coucou\n";
my $diffe = "42sh: -c: invalid option
Usage: 42sh [42sh option] [option] script-file ...
42sh options:
-c <command>
[-+]O
--norc
--ats-print
--version\n";
if (qx{$pgm} eq "$diffe")
{print RED "OK\n";}
Je ne sais pas ou est ce que je peux rediriger le flux vers la sortie d'erreur :S.
Si tu as une idee...
my $prm = "../42sh -coucou\n";
my $diffe = "42sh: -c: invalid option
Usage: 42sh [42sh option] [option] script-file ...
42sh options:
-c <command>
[-+]O
--norc
--ats-print
--version\n";
if (qx{$pgm} eq "$diffe")
{print RED "OK\n";}
Je ne sais pas ou est ce que je peux rediriger le flux vers la sortie d'erreur :S.
Si tu as une idee...
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
3 déc. 2007 à 15:14
3 déc. 2007 à 15:14
print STDERR "message d'erreur"
EverDraft
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
1
3 déc. 2007 à 15:40
3 déc. 2007 à 15:40
Desole mais en fait ca n'est pas bon du tout.
Il ne me diff plus rien du tout et ma met toujours ok meme quand ca ne l'est pas :S
J'ai essayer le print STDERR et ca n'est pas concluant... Si tu as d'autre idee...
Il ne me diff plus rien du tout et ma met toujours ok meme quand ca ne l'est pas :S
J'ai essayer le print STDERR et ca n'est pas concluant... Si tu as d'autre idee...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
3 déc. 2007 à 20:42
3 déc. 2007 à 20:42
Regarde ça
lami20j@debian:~/trash$ cat everdraft.pl #!/usr/bin/perl use strict;use warnings; my $cmd = qx/sh --version | head -1/; print "$cmd\n"; if (qx/sh --version --dsfsd 2>everdraft.error | head -1/ eq "GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)\n"){ print "OK\n"; }else{ print "KO\n"; } __END__ lami20j@debian:~/trash$ perl everdraft.pl GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu) KO lami20j@debian:~/trash$ cat everdraft.error sh: --dsfsd: invalid option Usage: sh [GNU long option] [option] ... sh [GNU long option] [option] script-file ... GNU long options: --debug --debugger --dump-po-strings --dump-strings --help --init-file --login --noediting --noprofile --norc --posix --protected --rcfile --restricted --verbose --version --wordexp Shell options: -irsD or -c command or -O shopt_option (invocation only) -abefhkmnptuvxBCHP or -o option lami20j@debian:~/trash$
EverDraft
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
1
4 déc. 2007 à 11:43
4 déc. 2007 à 11:43
J'ai finalement reussit a trouver la solution en m'inspirant de se que tu m'a dit:
open(STDERR, ">output.txt") or die "Impossible d’ouvrir output.txt en écriture : $!";
open(REF, ">ref.txt") or die "Impossible d’ouvrir output.txt en écriture : $!";
print STDERR qx{$pgm[$i]};
print REF "$diffe[$i]";
qx{diff -qu "ref.txt" "output.txt"};
$var = qx{echo $?};
if ($var == 0)
{
print BLUE "OK";
}
else
{
print RED "KO";
}
voila.
Encore merci pour tes conseils
open(STDERR, ">output.txt") or die "Impossible d’ouvrir output.txt en écriture : $!";
open(REF, ">ref.txt") or die "Impossible d’ouvrir output.txt en écriture : $!";
print STDERR qx{$pgm[$i]};
print REF "$diffe[$i]";
qx{diff -qu "ref.txt" "output.txt"};
$var = qx{echo $?};
if ($var == 0)
{
print BLUE "OK";
}
else
{
print RED "KO";
}
voila.
Encore merci pour tes conseils
Bonjour,
j'aimerai bien savoir comment t'as reussi a faire des tests sur des programmes C avec perl.
surtout pour des programme qui se lance comme le shell enfin qui attende qu'on leur donne des infos ou des commands.
as tu utilise le module test::more ou encore swig .. ?
merci bcp.
je creerai un topic pour cela si j'ai pas de reponse.
j'aimerai bien savoir comment t'as reussi a faire des tests sur des programmes C avec perl.
surtout pour des programme qui se lance comme le shell enfin qui attende qu'on leur donne des infos ou des commands.
as tu utilise le module test::more ou encore swig .. ?
merci bcp.
je creerai un topic pour cela si j'ai pas de reponse.
Bonjour,
j'aimerai bien savoir comment t'as reussi a faire des tests sur des programmes C avec perl.
surtout pour des programme qui se lance comme le shell enfin qui attende qu'on leur donne des infos ou des commands.
as tu utilise le module test::more ou encore swig .. ?
merci bcp.
je creerai un topic pour cela si j'ai pas de reponse.
j'aimerai bien savoir comment t'as reussi a faire des tests sur des programmes C avec perl.
surtout pour des programme qui se lance comme le shell enfin qui attende qu'on leur donne des infos ou des commands.
as tu utilise le module test::more ou encore swig .. ?
merci bcp.
je creerai un topic pour cela si j'ai pas de reponse.
EverDraft
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
1
8 déc. 2007 à 17:57
8 déc. 2007 à 17:57
Salut,
comme je suis un gros debutant en perl je sais vraiment pas de quoi tu parles lol.
Pour faire mes tests je creer un binaire et je le lance a partir de mon script de test.
Pour le lancer j'utilise la commande qx{}.
Si tu veus regarde cet exemple:
my $test = "monbinaire {arguments ou options}";
my $refout = "(sortie attendue)";
my $referr = "(sortie attendue)";
open(OUT, ">ref.out") or die "Impossible d’ouvrir ref.out en écriture : $!";
open(ERR, ">ref.err") or die "Impossible d’ouvrir ref.err en écriture : $!";
print OUT "$refout";
print ERR "$referr";
qx{$test] > monbinaire.out 2> monbinaire.err};
qx{diff -qu "ref.out" "42sh.out" > diff.out};
Voila.
Si tu ne comprend pas ce ke je fais demainde moi plus d'explication.
J'espere que j'ai pu t'aider
A plus
comme je suis un gros debutant en perl je sais vraiment pas de quoi tu parles lol.
Pour faire mes tests je creer un binaire et je le lance a partir de mon script de test.
Pour le lancer j'utilise la commande qx{}.
Si tu veus regarde cet exemple:
my $test = "monbinaire {arguments ou options}";
my $refout = "(sortie attendue)";
my $referr = "(sortie attendue)";
open(OUT, ">ref.out") or die "Impossible d’ouvrir ref.out en écriture : $!";
open(ERR, ">ref.err") or die "Impossible d’ouvrir ref.err en écriture : $!";
print OUT "$refout";
print ERR "$referr";
qx{$test] > monbinaire.out 2> monbinaire.err};
qx{diff -qu "ref.out" "42sh.out" > diff.out};
Voila.
Si tu ne comprend pas ce ke je fais demainde moi plus d'explication.
J'espere que j'ai pu t'aider
A plus
Bonjour,
Merci de ta reponse, comme je vois que ton binaire est un shell (42sh tres connu !) et bien tu te rapproche de ce que je veux faire, je t'explique :
le but des tests surtout pour la recette c'est de balancer des commandes a ton shell puis de faire un diff sur le fichier qui contient les resultats attendus avec la sortie de ton binaire, donc pour moi j'imagine que pour chaque commande tu creera un fichier, par exemple ls.shell dans lequel tu met le resultat du ls de bash puis un autre ls.MyShOut qui contiendera la sortie de ton binaire puis tu utilisera le module File::Compare pour le diff.
C'est vraiment ce que j'ai envie de faire avec mon binaire et pour etre plus clair :
Je veux, en perl, lancer bash, lui passer une commande puis l'enregistrer dans un fichier.
donc lancer bash/zsh/tsh/42sh/monBinaire (thread, fork ce que vous voulez) et lui balancer des comandes
c'est la grande difficulte pour moi :D
et utilises le module test::More pour tes tests c bcp plus sympa, sinon merci encore pour ton tres bon exemple.
aa+
Merci de ta reponse, comme je vois que ton binaire est un shell (42sh tres connu !) et bien tu te rapproche de ce que je veux faire, je t'explique :
le but des tests surtout pour la recette c'est de balancer des commandes a ton shell puis de faire un diff sur le fichier qui contient les resultats attendus avec la sortie de ton binaire, donc pour moi j'imagine que pour chaque commande tu creera un fichier, par exemple ls.shell dans lequel tu met le resultat du ls de bash puis un autre ls.MyShOut qui contiendera la sortie de ton binaire puis tu utilisera le module File::Compare pour le diff.
C'est vraiment ce que j'ai envie de faire avec mon binaire et pour etre plus clair :
Je veux, en perl, lancer bash, lui passer une commande puis l'enregistrer dans un fichier.
donc lancer bash/zsh/tsh/42sh/monBinaire (thread, fork ce que vous voulez) et lui balancer des comandes
c'est la grande difficulte pour moi :D
et utilises le module test::More pour tes tests c bcp plus sympa, sinon merci encore pour ton tres bon exemple.
aa+