IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

TProcess : redirection d'un flux Python vers un TMemo


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut TProcess : redirection d'un flux Python vers un TMemo
    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 : 1167
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 : 1010
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

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    hello,
    pour faire des échanges entre lazarus et du python il y a mieux qu'utiliser un Tprocess : il y a le paquet pythonForlazarus voir ici . PythonForLazarus est présent dans le gestionnaire de paquets en ligne.

    Ami calmant, J.P

  3. #3
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Bonjour jurassic pork .

    Merci pour ta réponse .

    Dans mes recherches sur TProcess, je suis déjà tombé sur le fil dont tu parles, mais mon but n'est pas spécifiquement faire des échanges entre Lazarus et Python. Les scripts que j'utilise n'attendent pas une saisie utilisateur. Ils n'ont besoin que de la ligne de commande.

    Je veux simplement lancer sous Lazarus des scripts python (ça c'est simple), et à l'occasion des commandes shell, et utiliser un TMemo comme stdOut à la place de la console, autant pour les sorties normales que pour les messages d'erreur, et que le rendu soit le même qu'avec la console, c'est à dire ne pas attendre que le programme soit terminé pour afficher les résultats intermédiaires. Est-ce que pythonForlazarus fait ça ?

    J'ai déjà installé le paquet CmdLine (qui est dans le dépot local comme pythonFoLazarus), pour voir, mais l'absence de doc, comme pour beaucoup de paquets, le rend inutilisable (ce n'est pas une critique, mais c'est dommage de faire un super boulot qui s'avérera difficile, voire impossible, à exploiter en raison d'un manque de documentation).

    Amicalement,
    naute

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Y aurait-il une piste ici, à l'alinéa "Reading large output" en adaptant la boucle de lecture ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    hello,
    il y a mieux que TProcess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TprocessEx includes Real time output management.
    voir ici

    et PythonforLazarus affiche aussi les print en temps réel :

    Nom : pythonForLazarus.gif
Affichages : 1027
Taille : 26,6 Ko

    Ami calmant, J.P

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Dans les exemples de Lazarus, il y a une démo qui permet de faire ce genre de chose. Elle permet même de faire plus, puisqu'on peut envoyer des lignes au processus en cours d'exécution.

    https://sourceforge.net/p/lazarus-cc...momainform.pas

  7. #7
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Naute,

    Un des problèmes c'est ton script python qui utilise Print et qui est "bloquant"

    Essayes comme ceci :

    Code python : 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
     
    #!/usr/bin/env python
    # coding: utf8
     
    import sys, time
     
    def ConsolePrint(msg):
          sys.stdout.write(msg)
          sys.stdout.flush()
     
    print('Compte à rebours:')
    time.sleep(1.0)
    i = 1
    while i < 11:
         j = 11 - i
         mymsg = str(j) + "\n"
         ConsolePrint(mymsg)
         i += 1
         time.sleep(0.5)
    print('C''est parti:')

    Deuxièmement utilises plutôt l'unité "ProcessUtil" de cette discussion et de FPCUpDeluxe

    (Notes : Tu peux commenter les lignes de 274 à 277 pour avoir un affichage bien clean)

    Ensuite procèdes comme ceci :

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Process, Forms, Controls, Graphics, Dialogs, StdCtrls,
      ProcessUtils;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        mmoConsole: TMemo;
        Button1: TButton;
     
        procedure Button1Click(Sender: TObject);
      private
        FProcessEx : TProcessEx;
        procedure ProcessExOutput(Sender:TProcessEx; output:string);
        procedure ProcessExError(Sender:TProcessEx; {%H-}IsException:boolean);
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    uses LazUTF8;
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
       Screen.Cursor := crHourGlass;
       FProcessEx := TProcessEx.Create(Self);
       FProcessEx.Options :=  FProcessEx.Options + [poUsePipes];
       FProcessEx.Executable := 'python';
       FProcessEx.Parameters.Add('test2.py');
       FProcessEx.OnOutputM := @ProcessExOutput;
       FProcessEx.OnErrorM := @ProcessExError;
       FProcessEx.PipeBufferSize := 10 * 1024;
     
       FProcessEx.Execute();
     
       While FProcessEx.Running do
       begin
         If FProcessEx.Output.NumBytesAvailable > 0 Then
         begin
           Application.ProcessMessages;
         end;
         If FProcessEx.StdErr.NumBytesAvailable > 0 Then
         begin
           Application.ProcessMessages;
         end;
       end;
     
      finally
       FreeAndNil(FProcessEx);
       Screen.Cursor := crDefault;
      end;
    end;
     
    procedure TForm1.ProcessExError(Sender: TProcessEx; IsException: boolean);
    begin
       mmoConsole.Lines.Append('Erreur ! ' + Sender.ExceptionInfo);
    end;
     
    procedure TForm1.ProcessExOutput(Sender: TProcessEx; output : String);
    begin
      {$IFDEF WINDOWS}
      mmoConsole.Lines.Text :=  mmoConsole.Lines.Text + WinCPToUTF8(output);
      {$ELSE}
      mmoConsole.Lines.Text :=  mmoConsole.Lines.Text + output;
      {$ENDIF}
     
      // pour scroll automatique
      mmoConsole.SelStart := Length(mmoConsole.Lines.Text)-1;
      mmoConsole.SelLength:=0;
     
    end;
     
    end.
    Résultat sous Windows


    A+

    Jérôme

    EDIT : @jurassic pork : Le temps que je ponde l'exemple, nos message se sont croisés
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Y'a eu de la mise à jour du coté de FPCUpDeluxe je te met l'unié "ProcessUtils" en attachement

    A+

    Jérôme
    Fichiers attachés Fichiers attachés
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  9. #9
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 130
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 130
    Par défaut
    Salut,

    je squatte cette discussion deux secondes, ça va intéresser tout le monde :
    Citation Envoyé par BeanzMaster Voir le message
    Y'a eu de la mise à jour du côté de FPCUpDeluxe
    du côté de FPC, du côté de Lazarus, ou interne à FPCUpDeluxe ?

    Et qu'est-ce qu'il faut faire ? Cliquer sur quoi ?

    Merci,

  10. #10
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Salut Jipété .

    J'ai actuellement la version "1.8.0e", à priori la plus récente. Par rapport à ma version précédente, qui ne mentionne que sa date de "construction", à savoir "build-date: 2018-03-19" , il y a eu un remaniement de l'interface, laquelle propose, entre autres, plus de choix dans les versions.
    À part ça, les fonctionnalités semblent similaires et je ne sais pas s'il y a des changements plus "profonds".

    Jérôme a peut-être plus de données la-dessus.

    À tout hasard, la dernière version est ici.

  11. #11
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Hello
    Citation Envoyé par Jipété Voir le message
    Salut,

    je squatte cette discussion deux secondes, ça va intéresser tout le monde :


    du côté de FPC, du côté de Lazarus, ou interne à FPCUpDeluxe ?

    Et qu'est-ce qu'il faut faire ? Cliquer sur quoi ?

    Merci,
    Je parlais des sources de FPCUpDeluxe. Qui ont changé. Depuis la première divulgation de son unité "ProcessUtils", rien avoir avec Lazarus et FPC

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  12. #12
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Bien vu Jérôme le coup du "flush" ! J'étais en train de me demander pourquoi ma démo ne fonctionnait pas. Je n'avais pas pensé à cette histoire de "flush" (alors que c'est un problème bien connu pour les moteurs d'échecs).

  13. #13
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bien vu Jérôme le coup du "flush" ! J'étais en train de me demander pourquoi ma démo ne fonctionnait pas. Je n'avais pas pensé à cette histoire de "flush" (alors que c'est un problème bien connu pour les moteurs d'échecs).
    Merci

    du coup, on peut virer cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       While FProcessEx.Running do
       begin
         If FProcessEx.Output.NumBytesAvailable > 0 Then
         begin
           Application.ProcessMessages;
         end;
         If FProcessEx.StdErr.NumBytesAvailable > 0 Then
         begin
           Application.ProcessMessages;
         end;
       end;
    Je ne sais pas trop pourquoi, lors, de mes essais, lorsque je l'avais supprimé, cela ne fonctionnait plus, et la miracle ; sans ; tout (re)marche
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  14. #14
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    D'abord, bonjour et merci à tous .

    Citation Envoyé par tourlourou Voir le message
    Y aurait-il une piste ici, à l'alinéa "Reading large output" en adaptant la boucle de lecture ?
    C'est une des premières pages que j'ai consulté pendant mes recherches, et d'ailleurs, mon exemple est une adaptation d'un des codes qui s'y trouvent. Peut-être que le code dont tu parles solutionnerait mon problème, mais je n'ai pas trouvé comment l'adapter à mon cas.

    Citation Envoyé par Roland Chastain Voir le message
    Dans les exemples de Lazarus, il y a une démo qui permet de faire ce genre de chose.
    C'est une piste intéressante si je décide de rester sur TProcess. Petit inconvénient, ce code utilise CommandLine qui est considéré comme obsolète, mais ce n'est pas forcément un obstacle.

    Citation Envoyé par BeanzMaster Voir le message
    Un des problèmes c'est ton script python qui utilise Print et qui est "bloquant"
    Oui, mais il a beau être bloquant, ça fonctionne quand même dans la console . Et il est impératif que l'affichage dans le TMemo fonctionne pour tout script Python valide.

    Citation Envoyé par BeanzMaster Voir le message
    Y'a du de la mise à jour du coté de FPCUpDeluxe je te met l'unié "ProcessUtils" en attachement
    Merci pour l'unité en pièce jointe Jérôme .

    @jurassic pork et @BeanzMaster
    Je pense que je vais m'intéresser sérieusement à l'unité ProcessUtil et à TProcessEx. Par contre, je suppose qu'il n'y a pas de documentation. Ou peut-être ?

    Je vous tiens au courant de mes avancées,
    amicalement,
    Hervé

  15. #15
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Hervé
    Citation Envoyé par naute Voir le message

    Oui, mais il a beau être bloquant, ça fonctionne quand même dans la console . Et il est impératif que l'affichage dans le TMemo fonctionne pour tout script Python valide.
    Oui mais sans le "flush" c'est mort. (pour le moment) Et à moins qu'il y ai une autre façon de faire en Python. Mais là je suis pas assez calé avec ce langage.
    Pis si tu veux afficher la sortie dans un memo quel est l’intérêt dans ce cas de vouloir afficher les lignes une à une. Surtout si le terminal n'est pas visible ?
    Après si tes scripts proviennent de diverses sources, il te faudra les adapter et avoir 2 versions. La normale et celle pour ton application.

    Citation Envoyé par naute Voir le message
    Merci pour l'unité en pièce jointe Jérôme .

    @jurassic pork et @BeanzMaster
    Je pense que je vais m'intéresser sérieusement à l'unité ProcessUtil et à TProcessEx. Par contre, je suppose qu'il n'y a pas de documentation. Ou peut-être ?

    Je vous tiens au courant de mes avancées,
    amicalement,
    Hervé
    Pas de soucis Franchement le TProcessEx est super utile, je trouve. Et pour ce qui est de la doc, ben c'est tout pareil que le TProcess, sauf que tu as les événements "OnOutputM/ OnOuput" et "OnErriom / OnError" pour capter les messages au fur et à mesure, provenant de la console. Plus quelques propriétés supplémentaires spécifiques, mais rien de bien méchant.

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  16. #16
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par naute Voir le message
    C'est une piste intéressante si je décide de rester sur TProcess. Petit inconvénient, ce code utilise CommandLine qui est considéré comme obsolète, mais ce n'est pas forcément un obstacle.
    Concernant CommandLine, la modification est vite faite. D'ailleurs voici l'adaptation que je viens de faire de la démo en question.

    Deux choses à noter. 1° La dernière ligne ne s'affiche pas toujours. La démo est conçue pour un processus qui ne s'arrête pas tant qu'on le ne lui dit pas de s'arrêter. Là tout de suite je ne vois pas comment régler ce problème.

    2° La redirection de l'erreur ne semble pas fonctionner, malgré l'option poStderrToOutput. Je m'en suis aperçu parce que le "à" (avec un accent) dans le script faisait échouer l'exécution, et que je ne voyais pas le message d'erreur. Mais peut-être que c'est tout simplement parce que la dernière ligne ne s'affiche pas.
    Fichiers attachés Fichiers attachés

  17. #17
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Deux choses à noter. 1° La dernière ligne ne s'affiche pas toujours. La démo est conçue pour un processus qui ne s'arrête pas tant qu'on le ne lui dit pas de s'arrêter. Là tout de suite je ne vois pas comment régler ce problème.

    2° La redirection de l'erreur ne semble pas fonctionner, malgré l'option poStderrToOutput. Je m'en suis aperçu parce que le "à" (avec un accent) dans le script faisait échouer l'exécution, et que je ne voyais pas le message d'erreur. Mais peut-être que c'est tout simplement parce que la dernière ligne ne s'affiche pas.
    J'ai trouvé une solution. Supprimer la condition if AProcess.Running then (dans la procédure DoStuffForProcess).

    Attention ! Du coup, il faut démarrer le timer seulement après le lancement du processus, autrement il y a une violation d'accès (qui ne se produit pas après après le processus s'est arrêté, je ne sais pas pourquoi).

    Une fois cette modification faite, les messages d'erreurs éventuels s'affichent bien.

Discussions similaires

  1. Redirection de stdout en C vers Python
    Par makia42 dans le forum PyQt
    Réponses: 11
    Dernier message: 05/04/2011, 21h03
  2. Redirection d'un flux de sortie system vers widget text
    Par bennyben87 dans le forum Interfaces Graphiques
    Réponses: 21
    Dernier message: 26/05/2010, 08h35
  3. Redirection de flux standard vers des fichiers
    Par raoulchatigre dans le forum C++
    Réponses: 8
    Dernier message: 29/01/2008, 11h27
  4. Python vers C/C++ : listage des Cnp et Anp
    Par samW7 dans le forum Général Python
    Réponses: 2
    Dernier message: 05/12/2005, 21h38
  5. redirection javascript d'un frame vers l'ensemble de la page
    Par etarip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2005, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo