hello,
pour comparer l'utilisation de Python for Lazarus et de TProcessEx dans le cas du script python de cette discussion, j'ai créé un petit projet (en pièce jointe). Dans ce projet il y a un TMemo qui affiche la sortie du script python pendant son exécution. Il y a trois boutons :
- Un pour lancer le script à partir de Python4Lazarus.
- Un autre pour effacer le contenu du TMemo.
- Un troisième pour lancer le script à partir de TProcessEx.
J'ai essayé le programme sous Windows 10 et Centos 8.1 avec Lazarus 2.0.8 et Fpc 3.0.4.
Ce que j'ai constaté :
Le programme fonctionne que ce soit pour Python4Lazarus ou TProcessEx sous les deux O.S.
La partie TProcessEx ne gère pas pour l'instant le scrolling automatique (visualisation du bas du texte affiché).
Pour Python4Lazarus au départ j'utilisais un composant TPythonGUIInputOutput pour l'affichage dans le TMemo. Sous Linux l'affichage de la sortie du script ne se faisait qu'à la fin de l'exécution du script python. En fait ce qui se passait c'est que les messages n'étaient pas traités pendant l'exécution du script. J'ai donc utilisé un composant TPythonInputOutput à la place avec comme procédure pour la sortie console :
1 2 3 4 5 6
| procedure TForm1.PythonInputOutput1SendUniData(Sender: TObject;
const Data: UnicodeString);
begin
Memo1.Append(Data);
Application.ProcessMessages;
end; |
Avec le Application.ProcessMessages, cette fois-ci l'affichage se fait bien au fur et à mesure de l'exécution du script.
Pour utiliser Python4Lazarus :
1 - Il faut avoir une version 3 de python installée sous son O.S.
2 - Il faut installer le paquet PythonForLazarus présent dans le gestionnaire de paquets en ligne.
3 - Il y a des propriétés à modifier dans le composant PythonEngine1 :
a - propriété DllName : mettre le nom de la dll de sa version python : exemple python38.dll, libpython3.8m.so
b - propriété DllPath : mettre le chemin complet où se trouve la dll (en général au même endroit que l'exécutable python).
Il y a une propriété UseLastKnownVersion qui permet de chercher automatiquement les deux propriétés précédentes mais comme cela ne fonctionne pas toujours, je ne l'ai pas utilisée.
Attention dans la procédure qui lance TProcessEx j'ai mis le chemin complet de l'exécutable python (pour pouvoir utiliser la version que l'on veut de python si il y en a plusieurs d'installer). Ne pas oublier de le modifier exemple :
FProcessEx.Executable := 'M:\Dev\python38\python.exe';
Voici à quoi le projet ressemble :
Ami calmant, J.P
Partager