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 :

Script perl fonctionne en .pl mais pas en .exe


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 20
    Par défaut Script perl fonctionne en .pl mais pas en .exe
    Bonjour à tous !
    Alors voilà, j'ai un script Perl qui à pour but de convertir des fichiers XML en map Freemind (.mm).
    Quand je lance ce script perl en ligne de commande tout fonctionne à merveille, cependant, j'ai besoin d'utiliser ce script sur une machine qui n'a pas perl. Je l'ai donc converti en fichier exécutable avec le module pp de PAR:: Packer. Mais quand je lance l'exécutable j'ai une erreur et le script ne marche plus.
    Pour information, il n'y a besoin d'aucun paramètre pour lancer le script.

    Voici mon erreur :
    Nom : errorExeScript1.png
Affichages : 181
Taille : 9,1 Ko

    Si je comprend bien l'erreur il ne trouve pas le fichier, pourtant il existe bel et bien et se trouve dans le même répertoire.

    Et voici mon code :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    #!/usr/bin/perl
    # (C) Kost. Distributed under GPL.
     
    use strict;
    use XML::Simple;
    use Getopt::Long;
    use Cwd;
    use Carp;
    use warnings;
    use File::Spec;
    # use Data::Dumper;
     
    my $mindmap;
    my $fileperhost = 1;
    my $nmapfile;
     
    my $repertoireCourant = getcwd;
    my $nomScan           = File::Spec->catfile($repertoireCourant, 'leScan.xml');
    my $nomMap            = File::Spec->catfile($repertoireCourant, 'mapXmind.mm');
     
    $nmapfile=$nomScan;
    $mindmap=$nomMap;
     
    #my $repertoireCourant= cwd();
    #my $nomScan="/leScan.xml";
    #my $nomMap="/mapXmind.mm";
    #$nmapfile=$repertoireCourant . $nomScan;
    #$mindmap=$repertoireCourant . $nomMap;
     
    #$nmapfile="leScan.xml";
    #$mindmap="mapXmind.mm";
     
    $fileperhost=0;
     
    print STDERR "Using $mindmap as output\n";
     
    print STDERR "Processing $nmapfile...\n";
    my $nmapxml;
     
    eval {
    #print qx(dir);
    $nmapxml = XMLin($nmapfile, ForceArray => 1, KeyAttr => ''); 
    } or die ("Check your XML file $nmapfile! Error parsing XML file: $!");
     
    my $mindfile=$mindmap;
    if ($fileperhost == 0) {
    	open (OFILE,">$mindfile") or die ("Cannot open $mindmap for writting: $!");
    	print OFILE '<map version="0.7.1">'."\n";
    	print OFILE '<node TEXT="scan">'."\n";
    	print OFILE '<node TEXT="hosts">'."\n";
    } else {
    	open (GFILE,">$mindmap.mm") or die ("Cannot open $mindmap for writting: $!");
    	print GFILE '<map version="0.7.1">'."\n";
    	print GFILE '<node TEXT="scan">'."\n";
    	print GFILE '<node TEXT="hosts">'."\n";
    }
     
    foreach my $host (@{$nmapxml->{'host'}}) {	
    	my %hostinfo;
    	$mindfile=$mindmap."-".$host->{'address'}->[0]->{'addr'}.".mm";
    	if ($fileperhost == 1) {
    		open (OFILE,">$mindfile") or die ("Cannot open $mindmap for writting: $!");
    		print OFILE '<map version="0.7.1">'."\n";
    		print OFILE '<node TEXT="scan" LINK="'.$mindmap.'.mm">'."\n";
    		print OFILE '<node TEXT="hosts">'."\n";
     
    		print GFILE "<node TEXT=\"$host->{'address'}->[0]->{'addr'}\" LINK=\"$mindfile\">\n";
    		print GFILE "</node>\n"; # host
    	}
    	print OFILE "<node TEXT=\"$host->{'address'}->[0]->{'addr'}\">\n";
     
    	print OFILE '<node TEXT="dns">'."\n";
    	print OFILE "<node TEXT=\"$host->{'hostnames'}->[0]->{'hostname'}->[0]->{'name'}\"/>\n";
    	print OFILE "</node>\n"; # dns
     
    	print OFILE '<node TEXT="OS">'."\n";
    	if (($host->{'os'}->[0]->{'osclass'}) || ($host->{'os'}->[0]->{'osmatch'})) {
    	print OFILE "<node TEXT=\"$host->{'os'}->[0]->{'osclass'}->[0]->{'type'},$hostinfo{'name'}=$host->{'os'}->[0]->{'osmatch'}->[0]->{'name'},$hostinfo{'acc'}=$host->{'os'}->[0]->{'osmatch'}->[0]->{'accuracy'}\"/>\n";
    	}
    	print OFILE "</node>\n"; # OS
     
    #	print Dumper (@{$host->{'ports'}->[0]->{'port'}});
     
    	print OFILE '<node TEXT="ports">'."\n";
    	if (defined({$host->{'ports'}->[0]->{'port'}})) {
    	print OFILE '<node TEXT="open">'."\n";
    	if ({$host->{'ports'}->[0]->{'port'}}) {
    	foreach my $port (@{$host->{'ports'}->[0]->{'port'}}) {
    		my $fstate;
    		$fstate=$port->{'state'}->[0]->{'state'};
    		if ($fstate eq "open") {
    			print OFILE "<node TEXT=\"$port->{'protocol'}/$port->{'portid'}\">\n";
    			print OFILE "<node TEXT=\"$port->{'service'}->[0]->{'name'};$port->{'service'}->[0]->{'product'};$port->{'service'}->[0]->{'conf'}\"/>\n";
    			print OFILE "</node>\n";
    		}
    	} # foreach
    	} # not empty
    	print OFILE "</node>\n";
    	} # defined
     
    	if (defined({$host->{'ports'}->[0]->{'extraports'}})) {
    	if (({$host->{'ports'}->[0]->{'extraports'}})) {
    		print OFILE '<node TEXT="extra">'."\n";
    		foreach my $port (@{$host->{'ports'}->[0]->{'extraports'}}) {
    			print OFILE "<node TEXT=\"$port->{'state'}\">\n";
    			print OFILE "<node TEXT=\"$port->{'count'}\"/>\n";
    			print OFILE "</node>\n"; # state
    		}
    		print OFILE "</node>\n"; # extra 
    	}
    	}
     
    	print OFILE "</node>\n";  # ports node
     
    	print OFILE "</node>\n"; # host node
    	if ($fileperhost == 1) {
    		print OFILE "</node>\n"; # hosts
    		print OFILE "</node>\n"; # scan
    		print OFILE "</map>\n";
    		close OFILE;
    	}
    }
    if ($fileperhost == 0) {
    	print OFILE "</node>\n"; # hosts
    	print OFILE "</node>\n"; # scan
    	print OFILE "</map>\n";
    	close OFILE;
    } else {
    	print GFILE "</node>\n"; # hosts
    	print GFILE "</node>\n"; # scan
    	print GFILE "</map>\n";
    	close GFILE;
    }

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    ça fait presque une dizaine d'années que je n'ai pas essayé de générer un exécutable avec Perl, j'ai oublié tous les détails (et puis ça a pu évoluer depuis).

    Mais je te conseille de lire ce tutoriel de notre ami Djibril: http://djibril.developpez.com/tutori...-sources-perl/.

  3. #3
    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 : 59
    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
    Par défaut
    Quand tu lances la version en .pl, tu mets exactement les mêmes paramètres ? (rappel de la commande dans l'historique du shell et remplacement de .pl par .exe ?) et depuis le même dossier lors de l'appel ? (dans ton script tu utilises Cwd pour déterminer le répertoire courant ... essaye plutôt de ne rien mettre, vu que par défaut, les fichiers sont pris avec un chemin relatif au répertoire courant s'ils ne commencent pas par /).

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 20
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonsoir,

    ça fait presque une dizaine d'années que je n'ai pas essayé de générer un exécutable avec Perl, j'ai oublié tous les détails (et puis ça a pu évoluer depuis).

    Mais je te conseille de lire ce tutoriel de notre ami Djibril: http://djibril.developpez.com/tutori...-sources-perl/.
    J'ai lu son tutoriel (très bien au passage ) mais je n'ai pas trouvé de solution à mon problème ...


    Citation Envoyé par Philou67430 Voir le message
    Quand tu lances la version en .pl, tu mets exactement les mêmes paramètres ? (rappel de la commande dans l'historique du shell et remplacement de .pl par .exe ?) et depuis le même dossier lors de l'appel ? (dans ton script tu utilises Cwd pour déterminer le répertoire courant ... essaye plutôt de ne rien mettre, vu que par défaut, les fichiers sont pris avec un chemin relatif au répertoire courant s'ils ne commencent pas par /).
    Je ne passe aucun paramètre pour la version en .pl, et oui les deux sont dans le même dossier.
    J'ai essayé de ne pas mettre le chemin, mais je tombe sur la même erreur malheureusement

  5. #5
    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 : 59
    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
    Par défaut
    Je voulais dire : quand tu lances le script tu es dans le même dossier dans les deux cas ?

    Pourrais-tu faire un "dir" du dossier c:\Stage\nmap_vers_xMind\scriptFinal ?
    Pourrais-tu montrer avec quelle ligne de commande utilisant pp tu as généré ton exécutable perl ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 20
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Je voulais dire : quand tu lances le script tu es dans le même dossier dans les deux cas ?

    Pourrais-tu faire un "dir" du dossier c:\Stage\nmap_vers_xMind\scriptFinal ?
    Pourrais-tu montrer avec quelle ligne de commande utilisant pp tu as généré ton exécutable perl ?
    Oui oui je suis dans le même dossier
    Quand je lance le script .pl :
    Nom : lancerScriptPerl.PNG
Affichages : 205
Taille : 4,8 Ko

    Le résultat du "dir" :
    Nom : resultatDir.PNG
Affichages : 238
Taille : 13,6 Ko

    La commande pour générer l'exécutable :
    Nom : genererExe.PNG
Affichages : 271
Taille : 2,4 Ko

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

Discussions similaires

  1. Script qui fonctionne sur chrome mais pas firefox
    Par crozet.magenta dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/01/2013, 12h14
  2. Script qui fonctionne en local, mais pas en ligne
    Par student_php dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/11/2010, 10h22
  3. [Wamp] Requete fonctionne sous phpmyadmin mais pas en script php
    Par ben.IT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 04/01/2010, 16h16
  4. Script qui fonctionne sous FireFox mais pas sous IE
    Par Sebastien14 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/01/2009, 10h32
  5. Réponses: 3
    Dernier message: 07/06/2007, 09h17

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