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 :

[Linux] Problème avec TProcess


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 35
    Par défaut [Linux] Problème avec TProcess
    Bonjour,

    Dans un code Lazarus, j'ai besoin d'ouvrir un programme externe. Apres m'être renseigné, voilà ce que j'ai tapé (en ayant bien declaré Process dans les uses) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.RUNClick(Sender: TObject);
    begin
         NMP_Process:= TProcess.Create(nil);
         NMP_Process.CommandLine:= '/bin/ping';
             NMP_Process.Options := NMP_Process.Options + [poWaitOnExit];
             NMP_Process.Execute;
             NMP_Process.Free;
    end;
    J'obtiens le message d'erreur suivant : Executable not found: "/bin/ping.exe".
    Cet exécutable est pourtant bien évidemment pr&sent sur mon disque (j'utilise Linux).

    Comment fixer ce problème ?
    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour,

    Ce ne peut être qu'un problème de path. Essaie en renseignant le chemin complet.
    Je viens de faire un test (sous Windows) et aucun problème.

    Remarque : "CommandLine" est déprécié.
    Il est préférable de remplacer par "Executable".
    Voir http://forum.lazarus.freepascal.org/...?topic=19643.0

    Thierry

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 35
    Par défaut
    Je viens d'essayer avec "Executable" au lieu de "CommandLine" mais voila l'erreur que j'obtiens :

    unit1.pas(147,18) Error: identifier idents no member "Executable"

    Sinon pour ce qui est du path complet, il me semble que c'est deja le cas avec '/bin/ping', puisque je suis sous Linux.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 122
    Par défaut
    Yep !
    Citation Envoyé par remissssss Voir le message
    Je viens d'essayer avec "Executable" au lieu de "CommandLine" mais voila l'erreur que j'obtiens :

    unit1.pas(147,18) Error: identifier idents no member "Executable" (...)
    Doit y avoir une faute de frappe...

    En ce qui me concerne, je me suis bricolé une petite procédure, c'est que du bonheur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure ProcExec(s, p: string; w: boolean);
    var
      aProcess: TProcess;
    begin
      aProcess := TProcess.Create(nil);
      with aProcess do
      begin
        Executable := s;
        if w then Options := Options + [poWaitOnExit];
        if p <> '' then Parameters.Add(p);
        Execute;
        Free;
      end;
    end;
    Exemple d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ProcExec('gimp', '/chemin/vers/images/une_image.jpg', False);
    end;
    Si besoin de plusieurs paramètres, adapter en conséquence en remplaçant p par p1, p2, etc.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 35
    Par défaut
    Tres belle procedure en effet ! qui ne resout pas le pb néanmoins
    Je vais réecrire mon script, la faute de frappe suggérée ne saute pas aux yeux pourtant

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par remissssss Voir le message
    Tres belle procedure en effet ! qui ne resout pas le pb néanmoins
    Je vais réecrire mon script, la faute de frappe suggérée ne saute pas aux yeux pourtant
    Quelle version de Lazarus sous Linux ? une 0.9.3x ?
    En ce temps là , la propriété n'était peut-être pas implémentée...

    Sinon, j'aurais ajouté un try finally dans l'exemple pour ne pas risquer de fuite de mémoire...

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : retraité
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Par défaut
    Bonsoir,

    J'ai fait copier coller avec ta procédure, et dans une console on a bien le résultat.

    Par contre ce qui me parait étrange c'est le message que tu reçois, /bin/ping.exe

    Il n'y a pas d’extension en 'exe' pour les exécutables sous Linux

    Michel.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/09/2010, 09h30
  2. [Lazarus] [Linux] Problème avec les points d'arrêts
    Par ovni76 dans le forum Lazarus
    Réponses: 6
    Dernier message: 15/02/2010, 22h45
  3. [Lazarus] [0.9.26/Linux] Problème avec DBGrid et TDBF
    Par ovni76 dans le forum Lazarus
    Réponses: 2
    Dernier message: 02/02/2009, 19h57
  4. Linux - problème avec fifos (communication IPC)
    Par wiliwiliwili dans le forum Linux
    Réponses: 4
    Dernier message: 27/08/2007, 22h18

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