Probleme avec perl system() [Fermé]

Signaler
-
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
-
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

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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") ;
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
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
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!
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
par curiosité essaie
$rep='C:\Program Files\Mozilla Firefox';
$resultat = qx{ dir $rep};
print $resultat;