IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Gérer les répertoires + commande system (bash)


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    mai 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2016
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Gérer les répertoires + commande system (bash)
    Bonjour à toutes et à tous,

    J'ai un fichier de code (mon programme) qui est dans un répertoire. Et mes données sont dans un autre répertoire. Donc je veux lancer mon code pour qu'il fasse les calculs. Il crée les répertoires demandés (dans le programme) dans le répertoire de mes données. MAIS quand j'utilise la commande system pour lancer un programme en bash, les résultats de cette commande se retrouve dans le même répertoire que mon code. Et donc je suis obligé de changer de répertoire manuellement pour lancer cette commande "system" pour avoir les résultats dans le bon répertoire (répertoire de données).

    Et donc ma question c'est comment je peux optimiser et généraliser mon programme, sans changer de directory manuellement pour lancer la commande system ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    my $dir = $ARGV[0];
     
    ## variables
    my $dirData = $dir."Data";
    my $dirSoftA = $dirData."/softwareA";   # dossier résultats du logiciel A
    my $dirSoftB = $dirData."/softwareB";   # dossier résultats du logiciel B
    my $dirSoftC = $dirData."/softwareC";   # dossier résultats du logiciel C
     
     
    ###  DONNEES ###
     
    mkdir ("$dirData", 0775) || print ("Couldn't create directory $dirData : $!");
     
     
    ## SOFTWARE A ##
    mkdir ("$dirSoftA", 0775) || print ("Couldn't create directory $dirSoftA : $!");
    chdir ("$dirSoftA");
    system ("softwareA ....");
     
     
    ## SOFTWARE B ##
    mkdir ("$dirSoftB", 0775) || print ("Couldn't create directory $dirSoftB : $!");
    chdir ("$dirSoftB");
    system ("softwareB ....");
     
     
    ## SOFTWARE C ##
    mkdir ("$dirSoftC", 0775) || print ("Couldn't create directory $dirSoftC : $!");
    chdir ("$dirSoftC");
    #~ system ("softwareC ....");
     
    }


    L'arborescence :

    Programme/
    |____ code/
    |____ monprogramme.pl
    |____ data/
    |____ Data/
    |_____ SoftwareA/
    |____results_softA
    |_____ SoftwareB/
    |____results_softB
    |_____ SoftwareC/
    |____results_softC



    Merci par avance pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Qu'est-ce qui te gêne à appeler chdir avant system ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    mai 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2016
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Après que system soit effectué, je suis obligé de rappeler chdir pour pouvoir créer un autre répertoire pour un autre software et rentrer dedans. Je devrais réustiliser chdir. Je cherche juste une façon de pouvoir avoir mes résultats de chaque software dans chaque répertoire associé au software, sans bouger du répertoire "code".

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas vraiment un problème Perl, me semble-t-il.

    Si le programme que tu appelles est écrit pour écrire dans le répertoire courant, c'est une faiblesse ou une limitation de ce programme qui n'a rien à voir avec ton script Perl, et tu n'as pas trop d'autre solution que de te mettre dans le répertoire en question. Ou de déplacer les données produites après coup. Même en redirigeant STDOUT dans le programme Perl, je ne pense pas que ça marcherait.

    Vérifie si le programme que tu appelles ne peut pas prendre en paramètre un répertoire cible. Ce serait le plus simple si c'est le cas.

    Sinon, une autre solution est de faire un petit script shell (bash ou autre) qui se charge de changer de répertoire et d'appeler ton autre programme. Et tu appelles ce petit script bash depuis ton programme Perl. Du coup, le changement de répertoire n'aura lieu que pour ce script bash et ton programme à appeler, mais cela n'aura pas d'effet ni de répercussions sur ton programme Perl.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    mai 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2016
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup Lolo78 pour toutes ces informations qui me sont bien utiles, je vais tenter ce que tu m'as dis.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 09/06/2007, 01h48
  2. Les commandes system
    Par Hyuge dans le forum Ada
    Réponses: 3
    Dernier message: 30/11/2006, 22h02
  3. [VB6]Gérer les espaces dans une command FTP
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/07/2006, 22h28
  4. Problème avec les commandes systèmes
    Par ouakammathieu dans le forum Administration système
    Réponses: 8
    Dernier message: 27/05/2006, 16h06
  5. Réponses: 2
    Dernier message: 08/07/2005, 11h40

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