Difference between revisions of "Command line parameters and environment variables/fr"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(5 intermediate revisions by 2 users not shown)
Line 11: Line 11:
 
=== Les bases ===
 
=== Les bases ===
  
A pascal program can access the parameters via ''ParamStr'' and ''ParamCount''. ''ParamStr(0)'' is the program name itself (and path _IF_ the operating system supports it) . ''ParamStr(1)'' is the first parameter. ''ParamCount'' is the number of parameters.
+
Un programme Pascal peut accéder aux paramètres via les fonctions ''ParamStr'' et ''ParamCount''. ''ParamStr(0)'' est le nom de programme lui-même (et le chemin d'accès _SI_ le système d'exploitation le permet). ''ParamStr(1)'' est le premier paramètre. ''ParamCount'' est le nombre de paramètres.
  
<syntaxhighlight>program Project1;
+
<syntaxhighlight lang=pascal>
 +
program Project1;
  
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 20: Line 21:
 
   I: Integer;
 
   I: Integer;
 
begin
 
begin
   WriteLn('Program: ', ParamStr(0));
+
   WriteLn('Programme: ', ParamStr(0));
 
   for I := 1 to ParamCount do
 
   for I := 1 to ParamCount do
 
     WriteLn('Param ', I, ': ', ParamStr(I));
 
     WriteLn('Param ', I, ': ', ParamStr(I));
 
end.</syntaxhighlight>
 
end.</syntaxhighlight>
  
For example:
+
P. ex.:
 
   $ /tmp/project1 -a
 
   $ /tmp/project1 -a
 
   Program: /tmp/project1
 
   Program: /tmp/project1
Line 32: Line 33:
 
=== Orienté utilisateur ===
 
=== Orienté utilisateur ===
  
A good program should give a help message when invoked with the wrong parameters and it should follow a common way of giving parameters. The unit custapp that comes with FPC provides the TCustomApplication class, which provides functions to easily check and read parameters. Of course you can still access the parameters directly via ParamStr and ParamCount.
+
Un bon programme devrait donner un message d'aide quand il est invoqué avec de mauvais paramètres et devrait suivre une manière commune dpour transmettre les paramètres. L'unité CustApp, qui vient avec FPC, fournit la classe TCustomApplication, laquelle fournit des fonctions pour contrôler et lire facilement des paramètres. Bien sûr, vous pouvez toujours accéder directement aux paramètres via ParamStr et ParamCount.
  
Every LCL application uses this automatically. The Application object is a TCustomApplication.
+
Toute application LCL utilise ceci automatiquement. L'objet Application est une TCustomApplication.
  
If you want to write a non LCL program, then create in lazarus a new project of type 'Console Application'. This will create a project1.lpr with some nice goodies, that almost all programs need.
+
Si vous voulez écrire un programme non LCL, puis créer un nouveau projet dans Lazarus du type 'Application Console'. Ceci créera un project1.lpr avec quelques goodies sympas dont presque tous les programmes ont besoin. Allez à la méthode DoRun pour spécifier ce que fait votre programme.
Go to the DoRun method.  
 
  
 
==== Contrôler un paramètre ====
 
==== Contrôler un paramètre ====
  
With TCustomApplication you can access parameters by name. For example your program should print a help text when the user gave the common help parameter ''-h''. The ''-h'' is a short option. The long form is the ''--help''. To test whether the user called the program with ''-h'' or ''--help'' you can use
+
Avec TCustomApplication, vous pouvez accéder aux paramètres par leur nom. P. ex., votre programme pourrait afficher un texte d'aide quand l'utilisateur donne le paramètre d'aide courant  ''-h''. ''-h' est une option courte. La forme longue est le ''--help''. Pour tester si l'utilisateur a appelé le programme avec ''-h'' ou ''--help'', vous pouvez utiliser;
  
<syntaxhighlight>if HasOption('h', 'help') then begin
+
<syntaxhighlight lang=pascal>
 +
if HasOption('h', 'help') then begin
 
   WriteHelp;
 
   WriteHelp;
 
   Halt;
 
   Halt;
 
end;</syntaxhighlight>
 
end;</syntaxhighlight>
  
Note: In an LCL form you must prepend ''Application.'' in front of HasOption. For example:
+
Note: Cela est valable dans la méthode DoRun. Dans une fiche LCL, vous devez qualifier HasOption avec ''Application.''. P. ex.:
  
<syntaxhighlight>if Application.HasOption('h', 'help') then begin
+
<syntaxhighlight lang=pascal>
 +
if Application.HasOption('h', 'help') then begin
 
   WriteHelp;
 
   WriteHelp;
 
   Halt;
 
   Halt;
 
end;</syntaxhighlight>
 
end;</syntaxhighlight>
  
 
+
<syntaxhighlight lang=pascal>
<syntaxhighlight>// If you only want to support the short option use:
+
// Si vous voulez seulement proposer l'option courte, utilisez:
 
if HasOption('h', '') then ...
 
if HasOption('h', '') then ...
  
// If you only want to support the long option use:
+
// Si vous voulez seulement proposer l'option longue, utilisez:
 
if HasOption('help') then ...</syntaxhighlight>
 
if HasOption('help') then ...</syntaxhighlight>
 +
 +
Contrairement à ce que laisse penser l'exemple de présentation, il n'est pas possible de cumuler plusieurs options courtes derrière un seul '-', ainsi -dh n'est pas reconnue comme une écriture condensée de -d -h.
  
 
==== Lire la valeur d'un paramètre ====
 
==== Lire la valeur d'un paramètre ====
  
Each parameter can be given a value. For example:
+
Chaque paramètre peut donner une valeur. Par exemple:
  
 
   project1 -f filename
 
   project1 -f filename
  
or with the long form:
+
ou avec la forme longue
  
 
   project1 --file=filename
 
   project1 --file=filename
  
<syntaxhighlight>WriteLn('f=', GetOptionValue('f', 'file'));</syntaxhighlight>
+
<syntaxhighlight lang=pascal>WriteLn('f=', GetOptionValue('f', 'file'));</syntaxhighlight>
  
Note: if you get the error message ''Option at position 1 needs an argument : f.'' then you forgot to add the option in the ''CheckOptions'' call.
+
Note: si vous obtenez le message d'erreur ''Option at position 1 needs an argument : f.'' alors vous avez oubliez d'ajouter l'option dans l'appel ''CheckOptions''.
  
 
==== Contrôler la validité de paramètres ====
 
==== Contrôler la validité de paramètres ====
  
Command line parameters are free text, so the user can easily type errors. Checking the syntax of the parameters is therefore mandatory. You can use the [[doc:fcl/custapp/tcustomapplication.checkoptions.html|CheckOptions]] method for this:
+
Les paramètre de ligne de commande sont du texte libre, aussi l'utilisateur peut facilement taper des erreurs. Contrôler la syntaxe des paramètres est en conséquence obligatoire. Vous pouvez utiliser la méthode [[doc:fcl/custapp/tcustomapplication.checkoptions.html|CheckOptions]] pour cela:
  
You can define, what parameters are allowed, which ones ones need a parameter and in case of a syntax error you can get an error message plus the options that were wrong to print helpful and detailed errors.
+
Vous pouvez définir quels paramètres sont permis, lesquels ont besoin d'un paramètre et en cas d'erreur de syntaxe, vous pouvez obtenir un message plus les mauvaises options pour afficher des erreurs utiles et détaillées.
  
Examples:
+
Exemples:
<syntaxhighlight>ErrorMsg := CheckOptions('hf:', 'help file:');</syntaxhighlight>
+
<syntaxhighlight lang=pascal>ErrorMsg := CheckOptions('hf:', 'help file:');</syntaxhighlight>
  
This allows passing short options ''-f value'' and ''-h''. It allows passing long options ''--help'' or ''--file=filename''. It does not allow ''--help'' with a value, nor ''--file'' without a value.
+
Cela permet de transmettre des options courtes ''-f value'' et ''-h''. Il permet de transmettre les options longues ''--help'' ou ''--file=filename''. Il ne permet pas de passer ''--help'' avec une valeur, ni ''--file'' sans valeur.
  
 
==Variables d'environnement==
 
==Variables d'environnement==
  
Three basic functions are provided for working with environment variables.  
+
Trois fonctions de bases sont fournies pour travailler avec les variables d'environnement.
  
 
[http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariable.html GetEnvironmentVariable]
 
[http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariable.html GetEnvironmentVariable]
Line 98: Line 102:
  
  
Example:  
+
Exemple:
  
<syntaxhighlight>var
+
<syntaxhighlight lang=pascal>
 +
var
 
   I: Integer;
 
   I: Integer;
 
begin
 
begin
 
   WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));
 
   WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));
  
   WriteLn('All environment variables:');
+
   WriteLn('Toutes les variables d''environnement:');
 
   for I := 0 to GetEnvironmentVariableCount - 1 do  
 
   for I := 0 to GetEnvironmentVariableCount - 1 do  
 
     WriteLn(GetEnvironmentString(I));
 
     WriteLn(GetEnvironmentString(I));
 
end.</syntaxhighlight>
 
end.</syntaxhighlight>
  
It is also possible to load all environment variables to TStringList object and access to name-value pair easily. String list automatically handle char separator which is by default character '='.
+
Il est aussi possible de charger toutes les variables d'environnement dans un objet TStringList et d'accéder à une paire nom-valeur de manière simple. En effet, la liste de chaîne manipule automatiquement le séparateur qui est par défaut '='.
  
<syntaxhighlight>var
+
<syntaxhighlight lang=pascal>
 +
var
 
   I: Integer;
 
   I: Integer;
 
   EnvVars: TStringList;
 
   EnvVars: TStringList;
Line 118: Line 124:
 
   EnvVars := TStringList.Create;
 
   EnvVars := TStringList.Create;
 
   try
 
   try
     // Load all variables to string list
+
     // Charge toutes les variables dans une liste de chaînes
 
     for I := 0 to GetEnvironmentVariableCount - 1 do  
 
     for I := 0 to GetEnvironmentVariableCount - 1 do  
 
       EnvVars.Add(GetEnvironmentString(I));
 
       EnvVars.Add(GetEnvironmentString(I));
Line 124: Line 130:
 
     WriteLn('PATH = ' + EnvVars.Values['PATH']);
 
     WriteLn('PATH = ' + EnvVars.Values['PATH']);
  
     WriteLn('All environment variables:');
+
     WriteLn('Toutes les variables d''environnement:');
 
     for I := 0 to EnvVars.Count - 1 do  
 
     for I := 0 to EnvVars.Count - 1 do  
 
       WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
 
       WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
Line 131: Line 137:
 
   end;
 
   end;
 
end.</syntaxhighlight>
 
end.</syntaxhighlight>
 
[[Category:RTL]]
 
[[Category:FPC]]
 
[[Category:Lazarus]]
 

Latest revision as of 07:07, 11 February 2020

English (en) español (es) suomi (fi) français (fr) русский (ru)

Présentation

Quand un programme est démarré, un utlisateur peut transmettre des paramètres de ligne de commandes et définir des variables d'environnement. P. ex., le compilateur FreePascal obtient la plupart de ces paramètres via les options de ligne de commande:

 fpc -Fudirectory -gh unit1.pas

Paramètres de la ligne de commande

Les bases

Un programme Pascal peut accéder aux paramètres via les fonctions ParamStr et ParamCount. ParamStr(0) est le nom de programme lui-même (et le chemin d'accès _SI_ le système d'exploitation le permet). ParamStr(1) est le premier paramètre. ParamCount est le nombre de paramètres.

program Project1;

{$mode objfpc}{$H+}

var
  I: Integer;
begin
  WriteLn('Programme: ', ParamStr(0));
  for I := 1 to ParamCount do
    WriteLn('Param ', I, ': ', ParamStr(I));
end.

P. ex.:

 $ /tmp/project1 -a
 Program: /tmp/project1
 Param 1: -a

Orienté utilisateur

Un bon programme devrait donner un message d'aide quand il est invoqué avec de mauvais paramètres et devrait suivre une manière commune dpour transmettre les paramètres. L'unité CustApp, qui vient avec FPC, fournit la classe TCustomApplication, laquelle fournit des fonctions pour contrôler et lire facilement des paramètres. Bien sûr, vous pouvez toujours accéder directement aux paramètres via ParamStr et ParamCount.

Toute application LCL utilise ceci automatiquement. L'objet Application est une TCustomApplication.

Si vous voulez écrire un programme non LCL, puis créer un nouveau projet dans Lazarus du type 'Application Console'. Ceci créera un project1.lpr avec quelques goodies sympas dont presque tous les programmes ont besoin. Allez à la méthode DoRun pour spécifier ce que fait votre programme.

Contrôler un paramètre

Avec TCustomApplication, vous pouvez accéder aux paramètres par leur nom. P. ex., votre programme pourrait afficher un texte d'aide quand l'utilisateur donne le paramètre d'aide courant -h. -h' est une option courte. La forme longue est le --help. Pour tester si l'utilisateur a appelé le programme avec -h ou --help, vous pouvez utiliser;

if HasOption('h', 'help') then begin
  WriteHelp;
  Halt;
end;

Note: Cela est valable dans la méthode DoRun. Dans une fiche LCL, vous devez qualifier HasOption avec Application.. P. ex.:

if Application.HasOption('h', 'help') then begin
  WriteHelp;
  Halt;
end;
// Si vous voulez seulement proposer l'option courte, utilisez:
if HasOption('h', '') then ...

//  Si vous voulez seulement proposer l'option longue, utilisez:
if HasOption('help') then ...

Contrairement à ce que laisse penser l'exemple de présentation, il n'est pas possible de cumuler plusieurs options courtes derrière un seul '-', ainsi -dh n'est pas reconnue comme une écriture condensée de -d -h.

Lire la valeur d'un paramètre

Chaque paramètre peut donner une valeur. Par exemple:

 project1 -f filename

ou avec la forme longue

 project1 --file=filename
WriteLn('f=', GetOptionValue('f', 'file'));

Note: si vous obtenez le message d'erreur Option at position 1 needs an argument : f. alors vous avez oubliez d'ajouter l'option dans l'appel CheckOptions.

Contrôler la validité de paramètres

Les paramètre de ligne de commande sont du texte libre, aussi l'utilisateur peut facilement taper des erreurs. Contrôler la syntaxe des paramètres est en conséquence obligatoire. Vous pouvez utiliser la méthode CheckOptions pour cela:

Vous pouvez définir quels paramètres sont permis, lesquels ont besoin d'un paramètre et en cas d'erreur de syntaxe, vous pouvez obtenir un message plus les mauvaises options pour afficher des erreurs utiles et détaillées.

Exemples:

ErrorMsg := CheckOptions('hf:', 'help file:');

Cela permet de transmettre des options courtes -f value et -h. Il permet de transmettre les options longues --help ou --file=filename. Il ne permet pas de passer --help avec une valeur, ni --file sans valeur.

Variables d'environnement

Trois fonctions de bases sont fournies pour travailler avec les variables d'environnement.

GetEnvironmentVariable

GetEnvironmentString

GetEnvironmentVariableCount


Exemple:

var
  I: Integer;
begin
  WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));

  WriteLn('Toutes les variables d''environnement:');
  for I := 0 to GetEnvironmentVariableCount - 1 do 
    WriteLn(GetEnvironmentString(I));
end.

Il est aussi possible de charger toutes les variables d'environnement dans un objet TStringList et d'accéder à une paire nom-valeur de manière simple. En effet, la liste de chaîne manipule automatiquement le séparateur qui est par défaut '='.

var
  I: Integer;
  EnvVars: TStringList;
begin
  EnvVars := TStringList.Create;
  try
    // Charge toutes les variables dans une liste de chaînes
    for I := 0 to GetEnvironmentVariableCount - 1 do 
      EnvVars.Add(GetEnvironmentString(I));

    WriteLn('PATH = ' + EnvVars.Values['PATH']);

    WriteLn('Toutes les variables d''environnement:');
    for I := 0 to EnvVars.Count - 1 do 
      WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
  finally 
    EnvVars.Free;
  end;
end.