utilisation de system

Le
GuiGui
Bonjour,


J'ai un petit souci avec la commande system.

J'ai testé ça :

--
#!/usr/bin/perl

my @prog = ('lynx','-dump -force_html test.html > test.txt');
system(@prog) == 0 or die "system @prog failed $? ";
open(TMP, "test.txt") or die "Impossible d'ouvrir le fichier test.txt";
my @str = <TMP>;
print @str;

--

Le problème est que j'obtiens simplement l'exécution de lynx sans aucun
argument et pas comme je pensais le résultat de la commande :
lynx -dump -force_html test.html > test.txt

J'ai fait une erreur, c'est certain, mais où ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #11176171
À (at) Wed, 02 Jul 2008 22:51:28 +0200,
GuiGui
J'ai un petit souci avec la commande system.

J'ai testé ça :

-----------------------------
#!/usr/bin/perl

my @prog = ('lynx','-dump -force_html test.html > test.txt');
system(@prog) == 0 or die "system @prog failed $? n";
open(TMP, "test.txt") or die "Impossible d'ouvrir le fichier test.txtn";
my @str = <TMP>;
print @str;

-----------------------------

Le problème est que j'obtiens simplement l'exécution de lynx sans aucun
argument et pas comme je pensais le résultat de la commande :
lynx -dump -force_html test.html > test.txt

J'ai fait une erreur, c'est certain, mais où ?



Tel que vous l'avez écrit, 'lynx' doit être appelé avec un seul et
unique argument qui contient '-dump -force_html test.html > test.txt'...

Vous pourriez éventuellement séparer chaque argument dans un tableau
mais il resterait encore le problème de la redirection qui, telle que
vous l'écrivez, nécessite absolument le passage par un 'shell' ce qui
pose ensuite des problème d'interprétation des arguments par ce
'shell' avant l'appel réel de 'lynx'.

En fait, la bonne solution dans ce cas, consiste à utiliser 'open' :

open my $resfh, "-|", 'lynx', '-dump', '-force_html', 'test.html'
or die "can't execute 'lynx': $!n";
my @str = <$resfh>;
close $resfh;

Pour en savoir plus :

perldoc -f open

--
Paul Gaborit - Perl en français -
GuiGui
Le #11177181
Paul Gaborit a écrit :


Tel que vous l'avez écrit, 'lynx' doit être appelé avec un seul et
unique argument qui contient '-dump -force_html test.html > test.txt'...

Vous pourriez éventuellement séparer chaque argument dans un tableau
mais il resterait encore le problème de la redirection qui, telle que
vous l'écrivez, nécessite absolument le passage par un 'shell' ce qui
pose ensuite des problème d'interprétation des arguments par ce
'shell' avant l'appel réel de 'lynx'.




Ok.

En fait, la bonne solution dans ce cas, consiste à utiliser 'open' :

open my $resfh, "-|", 'lynx', '-dump', '-force_html', 'test.html'
or die "can't execute 'lynx': $!n";
my @str = <$resfh>;
close $resfh;

Pour en savoir plus :

perldoc -f open




J'y vois plus clair maintenant. Je débute, et je n'avais jamais utilisé
open avec plus de 3 arguments ( open VAR, mode, nomfichier ).
Publicité
Poster une réponse
Anonyme