Bonjour .

Je voudrais rediriger le flux de sortie d'un script Python vers un TMemo.

J'utilise le script Python suivant :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#!/usr/bin/env python
# coding: utf8
 
import time
print('Compte à rebours:')
time.sleep(1.0)
i = 1
while i < 11:
     print(11 - i)
     i += 1
     time.sleep(1.0)
print('C''est parti:')

Si je le lance dans la console, ça me donne :
Nom : Capture du 2020-08-28 12-25-19.png
Affichages : 1156
Taille : 18,9 Ko

En utilisant le code Lazarus suivant :
Code pascal : 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
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Processus: TProcess;
begin
  try
    Processus := TProcess.Create(nil);
    Processus.Executable:= 'python';
    Processus.Parameters.Add('test.py');
    Processus.Options := Processus.Options + [poUsePipes];
    Processus.Execute;
    Memo1.Lines.LoadFromStream(Processus.output);
    finally
    Processus.Free;
  end;
end;

j'obtiens ceci :
Nom : Capture du 2020-08-28 12-25-37.png
Affichages : 998
Taille : 10,6 Ko

Apparemment tout va bien sauf que dans la console, l'affichage suit bien le script, à savoir :
  • affichage de "Compte à rebours :" ;
  • pause de 1 seconde ;
  • affichage de "10" ;
  • pause de 1 seconde
  • ... ;
  • affichage de "C'est parti :".


alors qu'en ce qui concerne le TMemo, le tout s'affiche en bloc après une attente correspondant à la somme des pauses.

Y a-t-il un moyen d'obtenir sur le TMemo le même affichage "dynamique" que sur la console ?

Merci d'avance,
naute