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 :

[langage] Commande DOS dans un programme


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut [langage] Commande DOS dans un programme
    Je cherche à executer une fonction de type DOS dans un programme Perl.
    En faite je souhaite executer la commande : (ou mieux dans un tableau) qui me permettrait de récuperer la liste des fichiers contenu dans un dossier. J'ai pensé à eval mais il me semble que cale ne marche pas ...
    Merci !

  2. #2
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut Re: Commande DOS dans un programme
    Citation Envoyé par Jibees
    Je cherche à executer une fonction de type DOS dans un programme Perl.
    En faite je souhaite executer la commande : (ou mieux dans un tableau) qui me permettrait de récuperer la liste des fichiers contenu dans un dossier. J'ai pensé à eval mais il me semble que cale ne marche pas ...
    Merci !
    Pour Unix ca marche ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ls=`ls`;
    print $ls;
    ls correspond a la commande dir sous dos.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Oui je sais mais moi je le souhaite pour DOS !!!

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut Re: Commande DOS dans un programme
    Citation Envoyé par Jibees
    Je cherche à executer une fonction de type DOS dans un programme Perl.
    En faite je souhaite executer la commande : (ou mieux dans un tableau) qui me permettrait de récuperer la liste des fichiers contenu dans un dossier. J'ai pensé à eval mais il me semble que cale ne marche pas ...
    Merci !
    en commande "simple" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("dir >fic.txt");
    ça créera le fichier fic.txt dans le répertoire où ce trouve ton programme

    si maintenant, tu veux récupérer chaque ligne retournée par dir, emploi les anti-quote (touche 7, pas du pavé numérique), exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @listedir = `dir`;
    foreach my $ligne(@listedir) {
        print $ligne;
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 23
    Points : 27
    Points
    27
    Par défaut
    Hallu,

    C'est pas terrible de faire des appels système en perl.J'ai bossé à la SNCF, et j'avais à l'époque un bon bouquin de perl, que je n'ai plu.
    Mais il me semble qu'il y a des librairies qui permettent de faire ton truc de récupérer les fichiers d'un dossier.
    Tu trouveras cela dans un bon bouquin, car les sites web sont pas assez précis sur le sujet.
    Sinon si tu veux absolument faire ton dir, il y a une option qui permet de récupérer uniquement le nom des fichiers et pas le reste ca t'évitera des filtres inutiles, et une autre option pour enlever les répertoires s'il y en a ( ca peut-être gênant ).

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    Perl sait très bien gérer les appels systèmes, j'ai par exemple un script Perl qui fait des appels systèmes en lançant un programme exe et ça marche à tous les coups.

    Maintenant, Perl intègre une fonction de globalisation et qui pourrait s'avérer utile ici (quel naze je suis, j'y avais pas pensé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use strict;
     
    @listedir = <*>; # <*> pour récupérer tous les fichiers, <*.txt> pour juste les txt
    foreach my $ligne(@listedir) { 
        print "$ligne\n"; 
    }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Cette derniere facon de faire est tout simplement géniale : je ne me rendais pas compte que le perl était aussi puissant !
    Toutefois un probleme subsiste : je souhaite spécifier le chemin où aller chercher ces fichier (car par défaut il recupere les fichiers du dossier ou ce trouve le script): peut-on spécifier un chemin absolu ?
    Merci encore !

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    Citation Envoyé par Jibees
    peut-on spécifier un chemin absolu ?
    Merci encore !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    use strict;
    my $Rep = 'c:\Programmes\Mon_Repertoire'; 
     
    @listedir = <"$Rep\\*">;
    foreach my $ligne(@listedir) {
        print "$ligne\n"; 
    }
    A essayer.
    A noter qu'avec cette syntaxe, le chemin du répertoire est pris en compte, ainsi si le 1er fichier était 'toto.txt', $listedir[0] contiendra la chaine suivante : 'c:\Programmes\Mon_Repertoire\toto.txt';

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Juste des petites rectifications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $Rep = "c:/programme/rep"; 
          	my @liste_dir = <'$Rep\\*'>;
    Je parle des / à la place des \ (on est sous Windows) et des ' ' à la place des "" (sinon il ne m'en trouvait que 1 !!!???)
    MERCI !!!

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Et encore un probleme ...
    Quand je lance mon programme sans passer en parametre le nom du dossier ou seront stockes les fichiers de conf' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c:\perl toto.pl ADRESSE_IP
    Maintenant je veux que les fichiers de conf' aillent dans le repertoire 'dossier'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c:\per toto.pl ADRESSE_IP dossier
    et il me balance l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Modification of non-creatable array value attempted, subscript -1 at jbv.pl line 348.
    La déclaration de la variable dossier se fait de la facon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $dossier = shift; # la variable dossier prend la valeur en parametre 
    if (!$dossier)
    {
    	$dossier = 'Dossier par défaut'; # sinon elle prend le dossier par défaut
    }
    et voila comment je recuppere les fichiers contenues dans le dossier ou sont présentent les conf'
    La variable index contient le nom du routeur, chemintftp la racine du serveur tftp et mes fichiers de conf' ont pour extension .conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	my $Rep = "$chemin_tftp\\$dossier\\$index";# chemin d'acces au repertoire contenant les fichiers de conf' du routeur
          	@liste_dir = <'$Rep\\*.conf'>;  # <*> pour récupérer les fichiers de type .conf 
    	my $nb_fichiers = $#liste_dir + 1;
    	print "DEBUG --> Nbr fichier(s) : $nb_fichiers\n"; 
    	foreach my $ligne(@liste_dir) 
    	{ 
        	print "DEBUG --> $ligne\n"; 
    	}
    	print "DEBUG --> @liste_dir[$nb_fichiers - 1]\n";
    La derniere ligne est la ligne 348 ...

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    si j'ai bien compris, tu lances ton script perl en lui donnant 2 paramètres, ADRESSE_IP et dossier ?

    Indiqués tels quels, ces 2 paramètres sont logés dans @ARGV, + précisément dans $ARGV[0] et $ARGV[1].

    N'emploie pas shift pour les récupérer car shitf() utilise par défaut @_, pas @ARGV.

    Pour ton code, essaie ceci pour vouère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dossier = ($ARGV[1] ? $ARGV[1] : 'Dossier par défaut');
    Autre présentation pour le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($ARGV[1]) {
        $dossier = $ARGV[1];
    } else {
        $dossier = 'Dossier par défaut';
    }

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Ca ne marche pas plus mais c'est vrai que c'est beaucoup plus élégant !
    C'est exacte je récupperre en parametre l'adresse ip du serveur tftp (parametre obligatoire) et le dossier ou seront stockés les fichiers (parametre optionnel).
    Tu as fait une these sur le Perl pour t'y connaitre autant ?
    Bon la tu me decois un peu ...

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    Citation Envoyé par Jibees
    Ca ne marche pas plus mais c'est vrai que c'est beaucoup plus élégant !
    C'est exacte je récupperre en parametre l'adresse ip du serveur tftp (parametre obligatoire) et le dossier ou seront stockés les fichiers (parametre optionnel).
    Essaie donc ça pour voir sous quelle forme ton prog récupère les paramètres que tu lui envoie (à mettre au tout début de ton script) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach(@ARGV) {
        print "$_\n";
    }
    Citation Envoyé par Jibees
    Tu as fait une these sur le Perl pour t'y connaitre autant ?
    Bon la tu me decois un peu ...
    Non, j'ai appris le Perl sur le tas et à force de tester des trucs qui marchent (ou qui marchent pas), tu finis par trouver tes marques et tes habitudes.

    Je suis persuadé qu'il y a des mecs plus "violents" ici en Perl que moi

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Ben en fait il me prend les paramêtre normale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    c:\Copie>perl jbv.pl adresse_ip dossier
    DEBUG -->adresse_ip
    DEBUG -->dossier
    Pourquoi tu voulais savoir ca en fait :

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    Citation Envoyé par Jibees
    Ben en fait il me prend les paramêtre normale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    c:\Copie>perl jbv.pl adresse_ip dossier
    DEBUG -->adresse_ip
    DEBUG -->dossier
    Pourquoi tu voulais savoir ca en fait :
    Je voulais être sûr que les arguments étaient récupérés correctement dans ton programme via @ARGV

    Y a juste un truc que je pige pas : c'est "adresse_ip" que tu lui donne réellement ou bien une adresse IP genre "255.125...." ? Et pour dossier, est-ce "dossier" que tu tapes ou bien l'adresse physique du dossier sur ton disque dur ?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    non non je lui donne bien une adresse IP du 192.168. ... . ... et le dossier est tappé en toute lettre : 'Sauvegarde des routeurs' par exemple.
    Une précision : mon programme marche tres bien si je ne tappe pas le dossier. Si je lui passe en parametre tout se passe tres bien (communication TFTP, transfert de fichier, création du dossier, stockage du fichier dans le dossier, etc ...) jusqu'a ce que je lui demande de m'afficher tous les fichiers contenu dans le dossier.

Discussions similaires

  1. > Exécution d'une commande Dos dans un programme Java
    Par siempre dans le forum Débuter
    Réponses: 1
    Dernier message: 08/01/2012, 11h26
  2. Exécution d'une commande DOS dans un programme Java
    Par siempre dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 08/01/2012, 03h07
  3. [PC] Commande Dos dans un programme Cobol
    Par Magoo dans le forum Cobol
    Réponses: 2
    Dernier message: 24/01/2008, 09h37
  4. commande DOS dans programme
    Par cotede2 dans le forum Windows
    Réponses: 8
    Dernier message: 20/05/2007, 02h14

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