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
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
A voir également:
- Probleme avec perl system()
- Reboot system now - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- System fan 90b - Forum Matériel & Système
- Advanced system care - Télécharger - Optimisation
- Missing operating system ✓ - Forum Windows
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
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
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.
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\\exampleMaintenant 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
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
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)
- mettre les chemin des applications dans la variable d'environnement PATH
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
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
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
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é ;-)
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") ;
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") ;
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
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
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!
$rep=" C:\\Program Files\\Mozilla Firefox";
$resultat = qx{ dir "$rep"}
print $resultat;
merci bcp!! votre aide m'a ete precieuse!
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
6 avril 2008 à 19:26
par curiosité essaie
$rep='C:\Program Files\Mozilla Firefox'; $resultat = qx{ dir $rep}; print $resultat;