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

Free Pascal Discussion :

Exécuter un programme externe sous Linux


Sujet :

Free Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut Exécuter un programme externe sous Linux
    Bonjour
    je voudrais exécuter un programme externe depuis Linux
    ce code fonctionne et m'ouvre la calculatrice
    mais à la compilation j'ai ce message test3.pas(5,2) Warning: Symbol "RunCommand" is deprecated
    Quelle autre commande utiliser ?
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    program test3;
    uses Process;
    var s : ansistring;
    begin
    	RunCommand('galculator',s);
    end.

  2. #2
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Il faut utiliser la class TProcess de l'unité Process cf http://wiki.lazarus.freepascal.org/E...Simple_Example

    A+
    • "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

  3. #3
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut
    merci oui c'est mieux.
    j'essaie d'utiliser sqlite3 en ouvrant la base test.sqlite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     AProcess.Executable:= 'sqlite3 ';
      AProcess.Parameters.Add('test.sqlite;');
    mais fpc me dit
    An unhandled exception occurred at $0000000000470955:
    EProcess: Executable not found: "sqlite3 "
    $0000000000470955
    $0000000000400291
    cordialement

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Salut
    Citation Envoyé par ptitjoz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AProcess.Executable:= 'sqlite3 ';
    2 possibilités : "executable not found" comme le dit le message, donc le binaire n'est pas là où il faut (ou le path n'est pas bon), ou c'est l'espace après le "3" qui perturbe.

    Citation Envoyé par ptitjoz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      AProcess.Parameters.Add('test.sqlite;');
    C'est quoi ce ";" après le filename ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Le point virgule qui "traînait" c'était un oubli...

    Mon but est de passer une requête sql et de récupérer le résultat dans un fichier, donc je pensais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AProcess.Executable:= 'sqlite3';
    AProcess.Parameters.Add('test.sqlite>requete.sql<result.tmp');
    mais ça ne fonctionne pas. Dans le terminal, sqlite3 attend des instructions...
    SQLite version 3.19.3 2017-06-08 14:26:16
    Enter ".help" for usage hints.
    sqlite>

    1)si je mets uniquement cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AProcess.Executable:= 'sqlite3';
    ça m'ouvre le terminal
    SQLite version 3.19.3 2017-06-08 14:26:16
    Enter ".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite>
    2) si je mets cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AProcess.Executable:= 'sqlite3 test.sqlite';
    An unhandled exception occurred at $0000000000470915:
    EProcess: Executable not found: "sqlite3 test.sqlite"
    3) si je mets sur deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AProcess.Executable:= 'sqlite3';
    AProcess.Parameters.Add('test.sqlite');
    SQLite version 3.19.3 2017-06-08 14:26:16
    Enter ".help" for usage hints.
    sqlite>
    Pour info dans une autre langage Basic (basiconverter) j'arrive à le faire .. et je voulais transposer à Fpc

    SUB subrequetesql : ' execute ordre sql
    LOCAL ficsql TYPE FILE*
    OPEN "ordresql.sql" FOR WRITING AS ficsql
    WRITELN codesql$ TO ficsql
    CLOSE FILE ficsql
    resultsql$=EXEC$("sqlite3 ./../compta2.sqlite < ordresql.sql")
    END SUB
    où je récupérais le résultat de la requête dans la variable resultsql$

    Merci pour vos conseils.

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Salut,

    problème de scripting, alors.

    j'ai googlé how to script sqlite3 et tu pourrais t'inspirer de la 1re réponse qui remonte.

    Sans garantie puisque, encore une fois, je ne connais pas du tout sqlite3.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    problème de scripting, alors.

    j'ai googlé how to script sqlite3 et tu pourrais t'inspirer de la 1re réponse qui remonte.

    Sans garantie puisque, encore une fois, je ne connais pas du tout sqlite3.
    Bonjour, je ne pense pas que ça soit un problème de ce que je passe à Sqlite3 (que je connais assez bien), je penserais plutôt que Fpc ne sait pas récupérer la main une fois qu'il a envoyé un ordre à Sqlite.

    Bien cordialement

  8. #8
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ptitjoz Voir le message
    Bonjour, je ne pense pas que ça soit un problème de ce que je passe à Sqlite3 (que je connais assez bien), je penserais plutôt que Fpc ne sais pas récupérer la main une fois qu'il a envoyé un ordre à Sqlite.

    Bien cordialement
    Bonjour non ce n'est pas FPC, j'ai testé sous windows cela fonctionne parfaitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Proc.Executable := 'sqlite3' ;
    Proc.Parameters.Add('chinook.db');
    Proc.Parameters.Add('SELECT * FROM artists');
    Ci-Joint une petit projet test modifié, tiré de cette discussion : https://www.developpez.net/forums/d1...ation-console/

    le zip contient le fichier db test provenant de http://www.sqlitetutorial.net/sqlite-sample-database/

    Nom : 2018-04-24_165952.jpg
Affichages : 292
Taille : 41,7 Ko

    ProcessSQL3LiteOutput.zip

    a+
    • "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 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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonsoir

    J'ai eu un peu de temps alors j'ai testé un peu plus. Se sont tes commandes SQLite qui ne sont pas correctes

    ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Proc.Executable := 'sqlite3' ;
       Proc.Parameters.Add('chinook.db');
       Proc.Parameters.Add('.output albums.txt');
       Proc.Parameters.Add('SELECT title FROM albums');
    fonctionne parfaitement. Je te suggère de jeter un œil sur tutoriel sqLite commands
    Les commandes que tu décris plus haut sont incorrectes

    Pour lire un fichier "requête" et envoyer le résultat dans un fichier texte, il faut procéder comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Proc.Executable := 'sqlite3' ;
       Proc.Parameters.Add('chinook.db');
       Proc.Parameters.Add('.output albums.txt');
       Proc.Parameters.Add('.read requete.sql');

    EDIT :

    Citation Envoyé par Jipété Voir le message
    Salut,

    problème de scripting, alors.

    j'ai googlé how to script sqlite3 et tu pourrais t'inspirer de la 1re réponse qui remonte.

    Sans garantie puisque, encore une fois, je ne connais pas du tout sqlite3.
    Et dans le deuxième :

    You want to feed the create.sql into sqlite3 from the shell, not from inside SQLite itself:

    $ sqlite3 auction.db < create.sql
    SQLite's version of SQL doesn't understand < for files, your shell does.

    Unfortunately, not all shells understand < as input redirection. (E.g., PowerShell.) – Alan Jun 3 '16 at 17:44
    @Alan PowerShell has some input redirection mechanism, no? And if not there's always bitops's approach. – mu is too short Jun 3 '16 at 17:52

    A+
    • "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

  10. #10
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut
    Bonjour
    oui effectivement il valait mieux passer par les commandes natives de sqlite plutôt que par les commandes de redirection du shell.
    merci pour ces exemples. Je me suis amusé à faire un peu autrement pour un résultat similaire avec ton fichier
    j'ai mis mes ordres sql dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    codsql:='SELECT UPPER(Lastname) AS ''Nom'' , FirstName AS ''Prénom'' , SUBSTR(BirthDate,1,10) AS ''Date Nais'' FROM employees';
    codsql:=codsql+' ORDER BY BirthDate';
     
    AProcess := TProcess.Create(nil);
    AProcess.Executable := 'sqlite3' ;
    AProcess.Parameters.Add('chinook.db');
    AProcess.Parameters.Add('.headers on');
    AProcess.Parameters.Add('.mode column');
    AProcess.Parameters.Add('.width 15 15 10');
    AProcess.Parameters.Add(codsql);
    AProcess.Options := AProcess.Options + [poWaitOnExit];
    et ça me donne cela en retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Nom              Prénom           Date Nais 
    ---------------  ---------------  ----------
    PARK             Margaret         1947-09-19
    EDWARDS          Nancy            1958-12-08
    ADAMS            Andrew           1962-02-18
    JOHNSON          Steve            1965-03-03
    CALLAHAN         Laura            1968-01-09
    KING             Robert           1970-05-29
    MITCHELL         Michael          1973-07-01
    PEACOCK          Jane             1973-08-29
    donc tout va bien et encore merci de vos aides

    Bien à vous

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/04/2015, 12h36
  2. Exécution d'un programme java sous Linux
    Par chercheur111 dans le forum Linux
    Réponses: 1
    Dernier message: 24/04/2012, 13h59
  3. Réponses: 7
    Dernier message: 24/11/2011, 16h01
  4. Réponses: 6
    Dernier message: 26/11/2008, 12h12
  5. Comment exécuter un programme externe ?
    Par spikto dans le forum Langage
    Réponses: 12
    Dernier message: 27/06/2005, 16h18

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