Rechercher : dans
Par :

Probleme avec perl system()

Dernière réponse le 6 avr 2008 à 19:26:06 ROM++, le 6 avr 2008 à 16:17:47 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.13

Meilleures réponses pour « Probleme avec perl system() » dans :
Perl - Les fichiers Voir La notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
CMS (Content Management System) Voir Gestion de contenu Un outil de « CMS » (Content Management System, en français Gestion de contenu) est un site web disposant de fonctionnalités de publication et offrant en particulier une interface d'administration (back-office) permettant à un...
Disk boot failure - Insert system disk and press Enter VoirLe message d'erreur «DISK BOOT FAILURE INSERT SYSTEM DISK AND PRESS ENTER», «Disque non système» ou «No system disk» signifie que l'ordinateur n'a pas trouvé de système d'exploitation sur lequel démarrer (booter). Les causes de ce message d'erreur...
[Virus] System Volume Information VoirSommaire Explications Exemple Supprimer un virus logé dans le dossier System Volume Information sous Windows XP Informations supplémentaires Explications Le dossier System Volume Information est utilisé par Windows XP pour...
[Disque dur] Erreur «Disque non système / No system disk» VoirLe message d'erreur «DISK BOOT FAILURE INSERT SYSTEM DISK AND PRESS ENTER», «Disque non système» ou «No system disk» au démarrage de l'ordinateur indique que l'ordinateur n'a pas trouvé de système d'exploitation sur lequel booter. Les causes de ce...
Perl - Caractéristiques du langage VoirFichier source, et interprétation Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa...
Les variables avec Perl VoirConcept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...
Perl - Introduction VoirHistoire de Perl Perl (Practical Extraction and Report Language) est un langage de programmation dérivé des scripts shell, créé en 1986 par Larry Wall afin de mettre au point un système de News entre deux réseaux. Il s'agit d'un langage interprété...

1

lami20j, le 6 avr 2008 à 17:31:58

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

106485010510997108

Répondre à lami20j

2

ROM++, le 6 avr 2008 à 18:13:32

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") ;

Répondre à ROM++

3

ROM++, le 6 avr 2008 à 18:19:59

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

Répondre à ROM++

4

lami20j, le 6 avr 2008 à 18:26:56

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 106485010510997108

Répondre à lami20j

5

ROM++, le 6 avr 2008 à 18:56:31

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

Répondre à ROM++

6

lami20j, le 6 avr 2008 à 19:06:17

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é ;-) 106485010510997108

Répondre à lami20j

7

ROM++, le 6 avr 2008 à 19:13:48

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!

Répondre à ROM++

8

 lami20j, le 6 avr 2008 à 19:26:06

Par curiosité essaie

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

Répondre à lami20j