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
2 questions me taraudent l'esprit :
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.
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
Partager