Bonsoir,

Je viens à nouveau vous solliciter pour un problème agaçant

Je tente d'obtenir un numéro de série pour une clé USB.

En lançant sur le terminal les 2 commandes
df | grep VERBATIM me renvoie '/dev/sdd1 123015548 49000524 74015024 40% /media/jj/VERBATIM'
Je récupère alors l'information '/dev/sdd1'
Je lance alors la commande
/bin/udevadm info --name=/dev/sdd1 | grep SERIAL_SHORT qui me renvoie 'E: ID_SERIAL_SHORT=070089F828F75090'
Il ne me reste plus qu'à isoler le numéro de série.

Je prends alors ma plus belle plume pour écrire le programme suivant
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
 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  process,
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
 
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
var
  MyProcess : TProcess;
  VStrTemp  : TStringList;
  Buffer: String;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyProcess := TProcess.Create(nil);
  VStrTemp  := TStringList.Create;
  MyProcess.Options     := [poWaitOnExit, poUsePipes];
  MyProcess.Executable  := 'df';
  MyProcess.Parameters.Add('grep');
  MyProcess.Parameters.Add('/media/jj/VERBATIM'); // KO, mais fonctionne avec '/media/jj/VERBATIM' !!!!!
  try
    MyProcess.Execute;
    VStrTemp.LoadFromStream(MyProcess.Output);
    Buffer := VStrTemp.Text;
 
{
-   la séquence ci-dessus me retourne un Buffer vide
 
-   la commande 'df | grep VERBATIM ' exécutée dans le terminal me renvoie :
  /dev/sdd1          123015548  49000524   74015024  40% /media/jj/VERBATIM
}
{
essai avec '/VERBATIM' ==> KO Buffer est vide
essai avec 'jj/VERBATIM' ==> KO Buffer est vide
essai avec '/jj/VERBATIM' ==> KO Buffer est vide
essai avec 'media/jj/VERBATIM' ==> KO Buffer est vide
essai avec '/media/jj/VERBATIM' ==> OK Buffer contient la ligne de titre et la réponse attendue
               -  'Sys. de fichiers blocs de 1K   Utilisé Disponible Uti% Monté sur'
               -  '/dev/sdd1          123015548  49000524   74015024  40% /media/jj/VERBATIM'                             '1ère ligne non filtrée de la réponse
}
  finally
  end;
  MyProcess.Free;
  VStrTemp.free;
end;
 
end.
2 questions me taraudent l'esprit :

1 : la plus évidente, pourquoi les réactions sont différentes ?
2 : pourquoi lorsque cela fonctionne j'obtiens en réponse la 1ère ligne de la commande df en plus de la réponse attendue ?

En vous souhaitant une bonne soirée,
jjnoui