1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : février 2009
    Messages : 37
    Points : 40
    Points
    40

    Par défaut Récupération du chemin du script en cours

    Bonjour à tous,

    Je cherche un moyen de récupérer le chemin complet du script dans lequel je me trouve au cours d'une execution. Pour faciliter je cherche un moyen non dépendant de l'OS (commande externe exclue donc) et je ne souhaite pas avoir à passer cette information en tant que paramètre (oui je fais dans le simple). Je considère aussi que le chemin de ce script peut très bien ne pas être le chemin en cours (cwd) lors de l'exécution.

    Quelque chose de similaire à la variable $0 mais avec le chemin serait parfait en fait mais je n'ai rien trouvé de concluant...

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 220
    Points : 8 448
    Points
    8 448

    Par défaut

    Tu as le module FindBin (dans le CORE), pas idéal mais mieux que rien.

    --
    Jedaï

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    18 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 18 630
    Points : 494 497
    Points
    494 497

    Par défaut

    J'ai pas tout saisi, mais voici un code qui pourrait te suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/perl
    use Cwd; 
    use warnings;
    use strict;
     
    print "Nom OS : ",$^O,"\n";
    print "Script courant : ",$0,"\n";
    print "Répertoire Courant : ",getcwd,"\n";

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : février 2009
    Messages : 37
    Points : 40
    Points
    40

    Par défaut

    Le probleme du cwd c'est qu'il va me renvoyer le répertoire courant donc mettons que je me trouve dans /home/deneteth, si j'exécute le script /usr/bin/test.pl je vais récupérer /home/deneteth et pas /usr/bin/ (ce que je recherche).

    Pour ce qui est du FindBin par contre il y a peut être quelque chose (le basename semble correspondre à ce que je recherche). Je vais regarder cela de plus près.

    Merci !

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    18 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 18 630
    Points : 494 497
    Points
    494 497

    Par défaut

    as tu testé le script ?

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : février 2009
    Messages : 37
    Points : 40
    Points
    40

    Par défaut

    Ben rapido oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use Cwd;
    use FindBin qw ( $Bin $Script );
     
    print "Trouvé $Script dans $Bin \n";
     
    $test = getcwd();
     
    print "Trouvé $0 dans $test\n";
     
    exit 0;
    J'ai bien le chemin recharché dans le premier cas, je récupère mon répertoire en cours dans le second (C: dans mon cas).

    Par contre je retire ce que j'ai dit sur $0, il m'a effectivement retourné le chemin complet ce coup-ci et pas dans mon autre script... je vais regarder cela de plus prêt.

    Je passe résolu de toute façon, j'ai effectivement un moyen de récupérer le chemin qui m'intéresse.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : octobre 2008
    Messages : 37
    Points : 23
    Points
    23

    Par défaut

    je déterre ce sujet résolu pour apporter une petite précision (qui a déjà été évoqué à propos du basename).

    La variable $0 est à traiter avec le module Find :
    use Find::Basename;
    my $nom_script = basename $0; #=> nom du script
    my $rep_script = dirname $0;#=> repertoire du script quelque soit le repertoire courant de lancement

    Plus d'infos dans les tutoriels et cours de formation pour apprendre la programmation PERL : http://perl.developpez.com/cours/

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    novembre 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2013
    Messages : 51
    Points : 74
    Points
    74

    Par défaut

    Citation Envoyé par seagull Voir le message
    je déterre ce sujet résolu pour apporter une petite précision (qui a déjà été évoqué à propos du basename).

    La variable $0 est à traiter avec le module Find :
    use Find::Basename;
    my $nom_script = basename $0; #=> nom du script
    my $rep_script = dirname $0;#=> repertoire du script quelque soit le repertoire courant de lancement

    Plus d'infos dans les tutoriels et cours de formation pour apprendre la programmation PERL : http://perl.developpez.com/cours/
    Bonjour seagull,
    Je reviens vers cette discussion car j'ai le même problème que Deneteth...Je viens de tester ta proposition et elle marche bien, merciiii !
    Mais je pense que c'est use File::Basename; qu'il faut mettre plutôt que use Find::Basename; c'est ce que j'ai mis de toutes les façons et cela a bien marché.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2009, 10h03
  2. Récupérer chemin absolu du script en cours d'exécution
    Par greatmaster1971 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 15/09/2008, 09h07
  3. afficher le chemin du script executé
    Par Mokhtar BEN MESSAOUD dans le forum Général Python
    Réponses: 2
    Dernier message: 07/07/2006, 16h06
  4. input type=file, récupération du chemin
    Par alexthomas dans le forum Fichiers
    Réponses: 5
    Dernier message: 22/11/2005, 14h02
  5. Récupération du chemin d'une image
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/09/2005, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo