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

Programmation et administration système Perl Discussion :

perl & windows commande system et argument


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 6
    Points
    6
    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
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    deux questions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system ($command $mai" $out $File.gpg $in $File);
    Que fait ce guillemet tout seul au milieu de ta ligne de commande?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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
    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 256
    Points
    12 256
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut correction
    En effet, je n'ai pas vu ce mauvais copier-coller, désolé

    en fait c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  6. #6
    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 256
    Points
    12 256
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 6
    Points
    6
    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, 125 affichages)

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

Discussions similaires

  1. commande system() ouvre un terminal sous windows
    Par malk.zameth dans le forum Windows
    Réponses: 4
    Dernier message: 02/09/2007, 19h41
  2. Réponses: 7
    Dernier message: 11/07/2007, 20h10
  3. Réponses: 12
    Dernier message: 09/06/2007, 00h48
  4. passer des arguments accentues a perl (sous windows)
    Par newnew dans le forum Langage
    Réponses: 6
    Dernier message: 14/09/2006, 12h12
  5. [API][Système] Executer une commande dos avec arguments
    Par oOoOuuhmAn dans le forum Général Java
    Réponses: 4
    Dernier message: 17/03/2006, 12h37

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