Lancement de processus par open
Le
Eric C.
Bonjour à tous,
Je cherche à lancer des processus via "open+pipe", sur un poste
Windows.
Le seul point délicat à gérer concerne la présence d'espaces dans l=
e
chemin d'accès à mon exécutable, et la consultation du fil http://bit=
.ly/fKvxLM
m'a permis de trouver des solutions pour gérer les arguments multiples
(la solution proposée par Paul Gaborit - syntaxe étendue d'open, avec
passage d'arguments en liste - n'est apparemment pas implémentée dans
mon perl 5.10)
Ci-dessous mes quelques tests, qui fonctionnent tous comme prévu sauf
le dernier :quelqu'un peut-il m'expliquer pourquoi l'appel n°5 redonne
le msg "'C:\Program' n'est pas reconnu en tant que commande interne
bla bla " que les solutions 3 et 4 permettent de contourner ?
use strict;
use File::Spec::Functions;
use Cwd;
my $cmd= 'C:\Program Files\Internet Explorer\iexplore.exe';
my $file = catfile(cwd(),'z.html');
# open SORTIE,$cmd." |"; # 1 : OK
# open SORTIE,$cmd." ".$file." |"; # 2 : NOK
# open SORTIE,"\"$cmd\" ".$file." |"; # 3 : OK
# open SORTIE,"\"$cmd\" $file |"; # 4 :OK
my $ligne = $cmd." ".$file;
open SORTIE,"\"$ligne\" |"; # 5 : NOK ?
while (<SORTIE>) {
#
}
close SORTIE;
Merci,
Eric
Je cherche à lancer des processus via "open+pipe", sur un poste
Windows.
Le seul point délicat à gérer concerne la présence d'espaces dans l=
e
chemin d'accès à mon exécutable, et la consultation du fil http://bit=
.ly/fKvxLM
m'a permis de trouver des solutions pour gérer les arguments multiples
(la solution proposée par Paul Gaborit - syntaxe étendue d'open, avec
passage d'arguments en liste - n'est apparemment pas implémentée dans
mon perl 5.10)
Ci-dessous mes quelques tests, qui fonctionnent tous comme prévu sauf
le dernier :quelqu'un peut-il m'expliquer pourquoi l'appel n°5 redonne
le msg "'C:\Program' n'est pas reconnu en tant que commande interne
bla bla " que les solutions 3 et 4 permettent de contourner ?
use strict;
use File::Spec::Functions;
use Cwd;
my $cmd= 'C:\Program Files\Internet Explorer\iexplore.exe';
my $file = catfile(cwd(),'z.html');
# open SORTIE,$cmd." |"; # 1 : OK
# open SORTIE,$cmd." ".$file." |"; # 2 : NOK
# open SORTIE,"\"$cmd\" ".$file." |"; # 3 : OK
# open SORTIE,"\"$cmd\" $file |"; # 4 :OK
my $ligne = $cmd." ".$file;
open SORTIE,"\"$ligne\" |"; # 5 : NOK ?
while (<SORTIE>) {
#
}
close SORTIE;
Merci,
Eric

Poser une question


"Eric C."
En tout premier lieu, N'UTILISEZ PAS DE BACKSLASH pour les chemins
Windows. Refaites *tous* vos tests en utilisant des chemins du type :
my $path = "C:/Progam Files/...";
Cela fait très longtemps que Windows accepte autant le "" que le "/"
comme séparateur.
Si certains problèmes persistent, revenez alors nous en parler. ;-)
--
Paul Gaborit - Perl en français -
... mais dans la vraie vie je récupère le nom de mon exe dans un
fichier ascii exporté depuis une appli tierce, où il est tout à fait
possible que l'utilisateur ait renseigné un chemin avec backslashs.
Certes, je pourrais effectuer la conversion en amont ...
... mais le même test effectué avec des slashs donne le même
résultat :
use strict;
use File::Spec::Functions;
use Cwd;
my $cmd= 'C:/Program Files/Internet Explorer/iexplore.exe';
my $file = catfile(cwd(),'z.html');
my $ligne = $cmd." ".$file;
open SORTIE,""$ligne" |"; # 5 : NOK ?
while (<SORTIE>) {
#...
}
close SORTIE;
ne fonctionne pas davantage.
Eric
Windows, pas trop même en XP certaines parties le refusent. Par contre
l'OS qui est en dessous de l'interface le fait depuis MS-DOS 3.1 (la
dernière version avant la convergence avec Unix, disait un certain
B. G. à l'époque).
Cela dit, je plussoie...
--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
"Eric C."
Normal : vos " supplémentaires autour de $ligne casse tout. Elles ne
devraient apparaître qu'autour de $cmd. Et vous devriez en mettre aussi
autour de $file. Avec un truc comme ça :
my $ligne = qq{"$cmd" "$file"};
open SORTIE,"$ligne |"
or die "Can't exec '$ligne': $!n";
est-ce que ça marche mieux ?
Ceci étant, je ne suis pas sûr que iexplore.exe propduira beaucoup de
chose sur SORTIE...
--
Paul Gaborit - Perl en français -
Erwan David
J'ai toujours cru que Windows était un système d'exploitation avec une
interface graphique par dessus (explorer ?). On m'aurait menti ?
;-)
On est d'accord.
--
Paul Gaborit - Perl en français -