Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Inscrit en
    mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 6
    Points : 2
    Points
    2

    Par défaut perl & windows commande system et argument

    bonjour,

    Le but est de crypter un fichier avec l'utilitaire Gnupgp.
    Sous Dos, la commande est:
    C:\Program Files (x86)\Cryptophane\GnuPG\gpg.exe --recipient didiertest --output monfichier.txt.gpg --encrypt monfichier.txt

    Je me bat depuis plusieurs jours sur une ligne de code qui est la suivante:

    system ($command $mai" $out $File.gpg $in $File);

    avec $command = ""C:\\Program Files (x86)\\Cryptophane\\GnuPG\\gpg.exe";
    et $mail = "didiertest";
    et $out = "--output";
    et $in = "--encrypt";

    l'erreur est la suivante:
    C:\Users\didier\Desktop>perl rep.pl
    Scalar found where operator expected at rep.pl line 51, near "$mail $out"
    (Missing operator before $out?)
    Scalar found where operator expected at rep.pl line 51, near "$out $File"
    (Missing operator before $File?)
    syntax error at rep.pl line 51, near "$mail $out "
    Execution of rep.pl aborted due to compilation errors.

    Après plusieurs recherche, je me demande si les -- de --output et --encrypt ne posent pas problème. j'ai essayer d'echapper les -- par \-\-output et \-\-encrypt, mais j'ai la meme chose.

    Auriez-vous une piste ?

    merci
    didier

  2. #2
    Expert Confirmé

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 323
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 323
    Points : 2 918
    Points
    2 918
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    deux questions:

    Code :
    system ($command $mai" $out $File.gpg $in $File);
    Que fait ce guillemet tout seul au milieu de ta ligne de commande?

    Code :
    $command = ""C:\\Program Files (x86)\\Cryptophane\\GnuPG\\gpg.exe";
    Pourquoi y a-t-il deux guillemets au début de ta commande?

    De plus, utiliser des guillemets simples (') t'éviterait peut-être d'échapper les anti-slash.

  3. #3
    Expert Confirmé

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 323
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 323
    Points : 2 918
    Points
    2 918
    Billets dans le blog
    1

    Par défaut

    Je n'ai pas Perl installé sous Windows, mais j'ai seulement l'exécutable perl.exe et le DLL correspondant dans un répertoire.

    J'ai essayé ça à la ligne de commande, dans une fenêtre dos (cmd):

    Code :
    perl -e "$i='dir'; $j='p*.*'; @a=command($i $j); print @a;"
    J'obtiens le même message que toi "Scalar found where operator..."

    J'ai ré-essayé toujours à la ligne de commande avec les backticks:

    Code :
    perl -e "$i='dir'; $j='p*.*'; @a=`$i $j`; print @a;"
    Là je récupère bien dans le tableau @a et j'affiche les fichiers du répertoire commençant par la lettre "p", notamment le perl.exe et le perl.dll.

    Donc cette seconde syntaxe semble fonctionner.

    En espérant que ça t'aide.

  4. #4
    Invité de passage
    Inscrit en
    mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 6
    Points : 2
    Points
    2

    Par défaut correction

    En effet, je n'ai pas vu ce mauvais copier-coller, désolé

    en fait c'est:

    Code :
    1
    2
    3
    4
    5
    6
    system ($command $mail $out $File.gpg $in $File);
     
    avec $command = "C:\\Program Files (x86)\\Cryptophane\\GnuPG\\gpg.exe";
    et $mail = "didiertest";
    et $out = "--output";
    et $in = "--encrypt";
    et j'obtiens toujours le meme message.

    cordialement,

  5. #5
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 16 763
    Points : 490 691
    Points
    490 691

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my $executable = '"C:/Program Files (x86)/Cryptophane/GnuPG/gpg.exe" ';
    my $fichier    = 'monfichier.txt';
    my $mail       = '--recipient didiertest ';
    my $out        = '--output '  . $fichier . '.gpg ';
    my $in         = '--encrypt ' . $fichier . ' ';
     
    my $command = $executable . $mail . $out . $in;
     
    print "[$command]\n";
    system $command;

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  6. #6
    Expert Confirmé

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 323
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 323
    Points : 2 918
    Points
    2 918
    Billets dans le blog
    1

    Par défaut

    Je pensais aussi qu'il serait probablement utile de concaténer la commande avant de l'afficher et de l'exécuter. En l'affichant, on s'assure que le résultat est bien ce que l'on veut.

    @Didier: tu as vu la syntaxe que je propose avec les backticks? Elle semble marcher.

  7. #7
    Invité de passage
    Inscrit en
    mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 6
    Points : 2
    Points
    2

    Par défaut résolu

    Bonjour,

    merci d'avoir répondu rapidement.
    Lolo78, merci a toi. cependant ta solution ne fonctionne pas.

    Djibril, un GRAND merci. Ta solution fonctionne.

    j'ai modifié un peu le code car je me suis aperçu que les repertoires comprenant des espaces (exemple: c:\mon dossier a moi), le script ne fonctionnait pas.
    j'ai ajouté:

    $File = "\"$File\""; # cela afin de permettre les noms de repertoires avec espace.

    my $Fileout = "\"$File.gpg\""; # cela afin de permettre les noms de fichiers avec espace.

    pour info mon programme permet de crypter individuellement les fichiers de chaque repertoires. Le but étant de les sauvegarder par ftp.
    c'est plus facile a lire qu'un gros fichier zip crypté. On a le nom des fichiers au moins.
    Je mets mon programme en PJ. Je le sais, ce n'est peut-etre pas du grand perl mais bon, comme je le disait dans le forum général, je débute.
    Comme amélioration, il restera:
    - a mettre en parametre le nom du repertoire.
    - a gérer le fait que si le fichier original est plus recent que le fichier crypté, faire un nouveau cryptage.
    et encore plein d'autres choses que je ne vois pas maintenant.

    merci a vous.
    Fichiers attachés Fichiers attachés
    • Type de fichier : pl rep.pl (1,3 Ko, 39 affichages)

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •