Probleme avec perl system()

Fermé
ROM++ - 6 avril 2008 à 16:17
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 avril 2008 à 19:26
Bonjour tout le monde,

j'ai ecrit un petit script en perl sous windows, mais j'ai un probleme avec la commande system()
en fait c'est surtout avec cd que ca bogue

le script tres simple en fait:

#! usr/bin/perl

$path = <STDIN>;
system ("cd $path");

voila le shell me dit system cannot find path specified, donc j'ai moi meme ecrit une valeur pour $path pour essayer, genre C:/Documents and Settings/example ca marche toujours pas,
j'ai essaye avec des /, des \, avec C:, sans la lettre, j'ai essaye chdir, j'ai meme ecrit l'addresse directement dans system("cd C:/documents and settings") ca marche toujours pas, il m'enerve a la fin je vois pas ou est le probleme

ca marche parfaitement sous linux

8 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
6 avril 2008 à 17:31
Salut,

si je ne me trompe pas les chemins sur windows on les écrit avec \ comme séparateur

donc chez toi devra être
C:\\Documents and Settings\\example
Maintenant peut être que tu te demanderas pourquoi \\ au lieu de \

Un simple slash sera interpreté comme quelque chose de spécial par Perl. C'est-à-dire comme un caractère d'échappement.
si tu écrit
C:\Documents and Settings\example
Perl va essayer de traduire \D et \e en quelque chose qui n'existe pas
Donc pour obtenir le caractère littéral \ il y a la possibilité \\ mais aussi celle d'utiliser les apostrophes simples
'C:\Documents and Settings\example'
Dans ton cas tu ne peux pas utiliser les apostrophes simples puisque tu as besoin d'intérpolation de la variable.

#! usr/bin/perl # ça c'est pour linux

chomp($path = <STDIN>);
system ("cd $path"); 
Et tu dois saisir C:\\Documents and Settings\\example

1
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
6 avril 2008 à 18:26
pour demarrer n'importe quelle application depuis n'importe ou, c'est pas du tout pratique
ce n'est pas le script qui decide mais la variable d'environnement PATH

donc system("firefox.exe"); s'en fiche complétement de ton 1er appel system("cd ....");
il va essayer tout simplement exécuter la commande firefox.exe qui n'existe pas
en revanche quand ton script s'exécute dans le répertoire il va trouver l'exécutable et il va l'exécuter

Donc je vois 2 possibilités :
- le chemin complet (je n'ai pas testé sous win)
system("C:\\Program Files\\Mozilla Firefox\\firefox.exe") ;

- mettre les chemin des applications dans la variable d'environnement PATH
1
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
6 avril 2008 à 19:06
Pour dire tu ne doit pas utiliser la fonction system qui ne capture pas la sortie

Pour capturer la sortie tu dois faire
$rep=" C:\\Program Files\\Mozilla Firefox";
$resultat = qx{ dir "$rep"}
ou
system("cd $rep");
$resultat=qx{ dir };
je n'ai pas testé ;-)
1
AH!! mais bien sur!! l'evidence meme!!

maintenant mon script va dans le chemin que je lui donne, mais il refuse de demarrer un programme dans ce dossier, sauf si mon script lui meme s'execute dans ce dossier, et vu que mon script il est concu (ou doit etre concu) pour demarrer n'importe quelle application depuis n'importe ou, c'est pas du tout pratique

system("cd C:\\Program Files\\Mozilla Firefox");
system("firefox.exe") ;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ah j'ai oublie de dire que j'essaie d'utiliser la commande "dir" et celle la ne marche pas non plus, elle s'obstine a m'afficher le contenu de mon C:/ quand je lui donne rien, et quand je lui donne un chemin particulier, elle me dit qu'elle le trouve pas
0
system("C:\\Program Files\\Mozilla Firefox\\firefox.exe") ; CA MARCHE!! MERCI BCP!!

une derniere question, et pour la commande "dir" comment faire? je suis sur que j'utilise la mauvaise syntaxe

supposons que j'aie besoin de lister tout ce qui est dans le chemin C:\Program Files\Mozilla Firefox\
j'essaie dans le shell de taper dir C:\Program Files\Mozilla Firefox\ mais il le trouve pas,
quand je tape dir C: seulement, il trouve le C et me liste tout
0
c'est celle la qui marche:

$rep=" C:\\Program Files\\Mozilla Firefox";
$resultat = qx{ dir "$rep"}
print $resultat;


merci bcp!! votre aide m'a ete precieuse!
0
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
6 avril 2008 à 19:26
par curiosité essaie
$rep='C:\Program Files\Mozilla Firefox';
$resultat = qx{ dir $rep};
print $resultat;
0