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

GTK+ avec C & C++ Discussion :

g_spawn_command_line_async() ne fonctionne pas..


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut g_spawn_command_line_async() ne fonctionne pas..
    Bonjour,

    J'utilise assez fréquemment g_spawn_command_line_async() et g_spawn_command_line_sync(), et sans trop de problème. Mais aujourd'hui - et pour un truc en apparence tout bête - je tombe sur un os.. Je veux - par exemple - juste détruire un fichier sous Windows (DOS, commande "del").

    J'ai un bout de code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int flag;
    char tempo[100]="nom du fichier", tempo2[100];
    (void)sprintf(tempo2,"del %s",tempo);
    flag=g_spawn_command_line_async(tempo2,NULL);
    (void)printf("%s (%d)\n",tempo2,flag);
    Ca ne marche pas, et le flag reste à zéro (erreur).

    J'ai essayé de travailler sur les guillemets (le nom du fichier contient des espaces), avec, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo2,"\"del %s\"",tempo);
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo2,"del \"%s\"",tempo);
    etc. Le flag reste définitivement à zéro (erreur) et l'instruction n'est pas exécutée. Alors qu'elle s'exécute bien si je la lance "à la main" "en direct".

    J'ai l'impression qu'il s'agit d'une bête étourderie de ma part (j'arrive à faire fonctionner cette affaire dans des cas bien plus alambiqués), mais j'ai beau chercher, je ne trouve pas.

    Une idée?

    Merci d'avance pour toute aide sur ce point.

    Cordialement, Eric.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Utilises le deuxième argument de la fonction gboolean g_spawn_command_line_async (const gchar *command_line, GError **error); pour afficher le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    GError *error = NULL;
     
    if (!(flag=g_spawn_command_line_async(tempo2, &error)))
    {
      g_printerr ("%s\n", error->message);
      g_error_free (error);
      error = NULL;
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Merci gerald3d,

    J’obtiens le message d'erreur suivant :
    L'exécution du processus fils a échoué (No such file or directory)
    Et ca dans tous les essais que je fais. Pourtant :

    1) Le fichier existe bien, et
    2) Si je lance la commande del "à la main", "en direct" sur une console, elle fonctionne très bien, prouvant qu'il n'y a pas d'erreur de syntaxe (ou autre).

    Je n'ai aucune idée d'où vient ce problème. Je soupconne que c'est lié à la présence d'espace dans le nom du fichier..

    Si quelqu'un a une idée.

    Encore merci pour toute aide sur ce point.

    Cordialement, Eric.

  4. #4
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Je continues ma réponse :

    Encore plus énigmatique !

    Si - au lieu de lancer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_spawn_command_line_async(tempo2,NULL);
    Je lance :
    Là tout marche bien. La syntaxe incluse dans char *tempo2 est donc correcte !

    Quelqu'un aurait-il une idée de pourquoi g_spawn_command_line_async() ne s'en sort pas ici, alors que system() fonctionne correctement ?

    D'avance merci pour tout éclaircissement sur ce point.

    Eric.

  5. #5
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    (re)bonjour,

    Bon, pour une raison et dans un contexte complètement différent (et dans un cas sensiblement plus compliqué) je viens de retomber sur exactement le même problème que celui que j'ai décrit dans ce post. g_spawn_command_line_async() n'abouti pas, alors que la commande taper "à la main en directe" fonctionne très bien. Cette fois-ci, je ne peux pas m'en sortir avec la fonction system().

    A présent, je suis vraiment planté, et je sollicite ici toute aide charitable qui pourrait me donner une piste.

    Je précise dans dans la chaine qui est envoyée à g_spawn_command_line_async(), il y a des anti-slash "\". Se pourrait-il que ce soit ceci la source de mes problèmes ? Devrais-je doubler tous les anti-slashs ? Se pourrait-il notamment que system() interprète correctement les anti-slashs alors que g_spawn_command_line_async() aurait des difficultés à cet endroit ?

    D'avance merci.

    Eric.

  6. #6
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Ma suggestion est un peu gratuite car je n'ai jamais utilisé les fonction g_spawn_..., en question, mais toutes se ramènent à l'appel de g_spawn_async_with_pipes() qui selon la doc possède un argument "flags" dont l'une des options est:
    G_SPAWN_SEARCH_PATH argv[0] need not be an absolute path, it will be looked for in the user's PATH.
    Tu peux peut-être explorer cette voie en appelant directement g_spawn_async_with_pipes()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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