Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Programmation et administration système
Programmation et administration système Vos questions sur les scripts d'administration système, création de compte utilisateur, socket, fork, ping, etc...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/05/2012, 12h26   #1
didier49122
Invité de passage
 
Inscription : 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
didier49122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2012, 19h28   #2
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 568
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 : 568
Points : 1 118
Points : 1 118
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.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2012, 19h46   #3
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 568
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 : 568
Points : 1 118
Points : 1 118
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.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2012, 20h01   #4
didier49122
Invité de passage
 
Inscription : 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,
didier49122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2012, 20h27   #5
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 512
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 512
Points : 31 674
Points : 31 674
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2012, 20h50   #6
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 568
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 : 568
Points : 1 118
Points : 1 118
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.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2012, 06h40   #7
didier49122
Invité de passage
 
Inscription : 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
Type de fichier : pl rep.pl (1,3 Ko, 4 affichages)
didier49122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h54.


 
 
 
 
Partenaires

Hébergement Web