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

Ada Discussion :

Comment exécuter une commande externe.


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    Par défaut Comment exécuter une commande externe.
    Bonsoir, je bute encore sur l'appel de commande externe.
    Comment exécutez vous vos commandes externes avec Ada ?

    J'essaye avec un import de system ou un binding de system mais ça fonctionne pas bien.

    S'il vous plaît, merci.

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    J'essaye avec un import de system ou un binding de system mais ça fonctionne pas bien.
    Peux-tu préciser ce que tu as fait ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    j'ai écrit un petit bout de code C dans le quel je fais un appel de ma commande grâce à la fonction 'system'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int matrix (void)
    {
      int status = 0;
     
      status = system("cmatrix -abC blue");  
      return status;
    }
    puis j'importe la fonction matrix.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function The_Matrix return C.Int;
       pragma Import (C, The_matrix, "matrix");

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Et quel est le résultat ?

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Pourquoi pas une importation du genre :

    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function system (cmd : in string) return integer;
    pragma import (C, system, "system");

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Un exemple qui marche chez moi :

    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with Ada.Text_Io ;
    use Ada.text_Io ;
     
    procedure Test is
       function system (cmd : in string) return integer;
       pragma import (C, system, "system");
     
       Res : Integer ;
     
    begin
       Res := System( "echo coucou" ) ;
    end;

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PRomu@ld Voir le message
    Et quel est le résultat ?
    Parfois ça marche, parfois ça marche pas.

    Mais je pense que ça viens de la commande que je lance.

    Citation Envoyé par PRomu@ld Voir le message
    Pourquoi pas une importation du genre :

    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function system (cmd : in string) return integer;
    pragma import (C, system, "system");
    C'est ce que j'écrivais au début, puis je me suis dit que c'est mieux en utilisant interfaces.C.

    Citation Envoyé par PRomu@ld Voir le message
    Un exemple qui marche chez moi :
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with Ada.Text_Io ;
    use Ada.text_Io ;
     
    procedure Test is
       function system (cmd : in string) return integer;
       pragma import (C, system, "system");
     
       Res : Integer ;
     
    begin
       Res := System( "echo coucou" ) ;
    end;
    Oui, je pense que ça fonctionnerait aussi chez moi.

    Je pense 2 chose, d'une, "cmatrix" est une commande lourde, et je lance une tache avec un get_immediate ou un get_line juste avant mon appel à system.

    Normalement cmatrix prend un caractère pour sortir, et là je doit tantôt en entrer deux, alors que parfois il n'en suffis qu'un.
    C'est pour dire que parfois ça marche, parfois ça marche pas.

  8. #8
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    A mon avis, le problème ne réside sans doute pas dans System.

    C'est ce que j'écrivais au début, puis je me suis dit que c'est mieux en utilisant interfaces.C.
    Il n'y a surtout pas d'intérêt à faire un appel à une fonction qui fait appel à une autre (surtout que tu connais la ligne à exécuter).

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PRomu@ld Voir le message
    A mon avis, le problème ne réside sans doute pas dans System.
    Ben, je ne sais pas, j'utilise system sans problème mais je me pose des question.
    A quoi servent les fonctions Spawn et la dernière Get_Command_Output.
    Citation Envoyé par PRomu@ld Voir le message
    Il n'y a surtout pas d'intérêt à faire un appel à une fonction qui fait appel à une autre (surtout que tu connais la ligne à exécuter).
    C'est une autre histoire si je puis me permettre

  10. #10
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    C'est une autre histoire si je puis me permettre
    Crois en mon expérience de debuggage de code C et SSE, moins tu as de code plus c'est facile d'identifier les problèmes. En ada c'est le même principe si tu peux faire le travail en une fonction, c'est mieux que de le faire avec deux.

    A quoi servent les fonctions Spawn et la dernière Get_Command_Output.
    Ce sont deux fonctions de GNAT, qui permettent de manière plus ou moins complète (en terme de fonctionnalité) pour lancer des programmes externes (c'est un peu ce que tu veux faire, hien ? )

    Spawn :

    http://www.radford.edu/~nokie/classe...at-os_lib.html

    Get_Command_Ouput

    http://www.doc.ic.ac.uk/~awl03/cgi-b...a/g-expect.ads

  11. #11
    Invité
    Invité(e)
    Par défaut
    Et bien justement, je préfèrerais utiliser des fonction Ada, plutôt que ce faire un import de la fonction système... j'ai testé les spawn et get_command_output mais sans succès... Donc, je cherche, c'est un peu l'objet du sujet effectivement.

  12. #12
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    j'ai testé les spawn et get_command_output mais sans succès... Donc, je cherche, c'est un peu l'objet du sujet effectivement.
    Spawn et Get_Command_Output ne sont pas des fonctions ada mais GNAT (donc tout sauf portable). L'import de la fonction système se fait via une directive standard d'ada et importe une fonction standard du C (C90), c'est donc la solution la plus standard et portable.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Très juste, bien vu.

    N'y a-t-il pas de moyen avec Ada ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    J'ai réécrit une fonction system(commad : string) return integer;
    Pour faire un pragma import (C, system, "system");
    Et j'appelle s'implement system("cls");

    J'ai un message de la part de Windows qui me dis "clsstophalt" n'est pas une commande interne.

    Une idée s'il vous plait ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Bonsoir,

    J'ai réécrit une fonction system(commad : string) return integer;
    Pour faire un pragma import (C, system, "system");
    Et j'appelle s'implement system("cls");

    J'ai un message de la part de Windows qui me dis "clsstophalt" n'est pas une commande interne.

    Une idée s'il vous plait ?

    Bonjour, il y avait un caractère de contrôle dans la chaîne (3 char), je vous dit pas lequel, je ne le sais pas.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PRomu@ld Voir le message
    Pourquoi pas une importation du genre :

    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function system (cmd : in string) return integer;
    pragma import (C, system, "system");


    Parce que tu risque de retrouver dans ta commande la chaîne suivant en plus.

    Si tu appelle cls par exemple, pour afficher en suite Bonjour, tu va appeler clsBonjour.
    Avec Interface.C le problème disparait.

Discussions similaires

  1. [PowerShell] Comment exécuter une commande contenue dans une variable ?
    Par mzawo dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/05/2011, 17h58
  2. Réponses: 6
    Dernier message: 20/01/2011, 11h52
  3. exécuter une commande externe
    Par artymort dans le forum Langage
    Réponses: 5
    Dernier message: 18/12/2010, 11h27
  4. Réponses: 4
    Dernier message: 04/05/2009, 16h33
  5. Réponses: 6
    Dernier message: 03/10/2007, 21h35

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