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

Qt Discussion :

[Qt] QProcess Erreur


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut [Qt] QProcess Erreur
    Bonjour, j'ai un problème avec l'exécution d'un fichier bat sous QProcess. Lorsque je lance ce fichier bat sous MS DOS j ai aucun souci, mais si je le lance avec Qprocess le processus n'arrive pas à se fermer(message d'erreur du fichier bat).

    J'aimerai savoir quelles sont les differences entre le lancement sous MS DOS et Qprocess qui peuvent engendrer ce problème?

    J'ai essayé avec la commande
    cmd.exe /K test.bat
    Ca marche très bien donc ca vient bien de QProcess le problème. Donc je sais pas comment résoudre ca.

    Si vous avez des idées je suis preneur

    Le problème, c'est pas l'erreur mais la demande d'appuyer sur une touche pour terminer le programme(qui est demandé à cause de l'erreur). Et je vois pas comment on peut savoir à quel moment il veut qu'on appuie sur une touche et comment simuler cet appuie.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Bonjour.

    Quel est le message d'erreur renvoyer lors de l'utilisation de QProcess ??

    Cordialement,
    PKO

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    L'erreur ne vient pas de Qt donc je peux te la donner mais je pense pas que ca peut aider. Il ecrit dans un fichier :
    FLUSH--FAILED:: Invalid argument
    FLUSH--FAILED:: No such file or directory

    C'est le fichier bat qui n'aime pas etre lancer avec le QProcess.

    La j'ai reussi à régler le problème, des que je lis Message et error je termine de force l'application mais c'est pas très propre.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Un fichier .bat n'est pas un exécutable. C'est cmd.exe que tu dois lancer dans un process en lui donnant en argument le .bat, exactement comme tu le fais depuis la console

    edit: ah ok c'est peut être ce que tu fais déjà.

    Ce qui change, c'est certainement le répertoire courant de ton .bat. Utilise QDir::setCurrentDirectory avant de le lancer.
    Pour détecter une erreur, il faut te connecter au flux stdout/stderr en te conectant aux slots readyReadStandardOutput() / readyReadStandardError() (tu peux connecter 2 fois la même fonction) et appeler readAllStandardOutput() / readAllStandardError(). De mémoire QProcess peut fusionner les 2 flux pour toi.

    Pour "simuler" une saisie de texte, utilise simplement la fonction write() de QProcess.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    J'utilise déjà la commande setCurrentDirectory. Mais ça me sert à rien de récupérer l'erreur car techniquement il y en a pas. J'utilise un logiciel de calcul par élément fini (IDEAS) et c'est lui qui crée un message d'erreur. L'erreur vient de la combinaison de QProcess et ce logiciel(car avec d'autre j'ai pas le probleme). C est pour ca que j'avais demander la différence entre QProcess et le lancement en mode Command sous DOS

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    "techniquement il y en a pas" comme tu dis, mais hum...

    Ce qui change, c'est que ton .bat ne s'execute plus dans une console, donc certains noms de fichiers de Windows (CONIN$, CONOUT$) ne doivent plus exister. C'est spécifique Win32, et pas Qt. Lire la fin de la doc de CreateFile :
    http://msdn.microsoft.com/en-us/libr...58(VS.85).aspx

    Si c'est le cas, ça veut dire que... l'appli que tu lances est mal développée Elle est dépendante d'une console.

    2 solutions :
    - tu ignores cette erreur
    - tu lui fournis une console

    si, bien sûr, l'erreur vient de là...

    edit: pour tester si l'erreur vient de la, ajoute "CONFIG += console" à ton .pro, recompiler et réessaye...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    je suis d accord avec toi pour les solutions que tu proposes mais je ne sais pas comment lui fournir une console en Qt.

    J'ai essayé de mettre cmd.exe /K test.bat mais j'ai eu droit à la même erreur.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Si l'appli parente possède une console, alors les enfants en hérite automatiquement, sauf si y'a bidouille au niveau de CreateProcess (voir les options avancées de QProcess que tu n'utilises pas à priori).

    La seule chose que tu as à faire (pour tester du moins) c'est de transformer ton appli Qt en une appli console en ajoutant "CONFIG += console" à ton .pro.

    Une autre options est d'inclure <windows.h> et de faire un appel à AllocConsole() juste avant de démarrer ton process. Une fois qu'il est exécuté, tu peux fermer cette console en appelant FreeConsole().

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    J'ai rajouté dans le fichier pro la commande CONFIG += console mais ca règle pas du tout le probleme. La methode d'inclure windows.h me plait pas car mon programme devra etre compiler pour linux et windows. Donc je sais toujours pas pourquoi j'ai ce probleme.

  10. #10
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par Keldran Voir le message
    La methode d'inclure windows.h me plait pas car mon programme devra etre compiler pour linux et windows.
    (Quand on fait un programme pour Windows et Linux, on fait de la programmation conditionnelle, ce qui implique une compilation conditionnelle, implémentable grâce aux ifdef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // ex : http://en.wikipedia.org/wiki/C_preprocessor
    Conditional compilation
    // The #if, #ifdef, #ifndef, #else, #elif and #endif directives can be used for conditional compilation.
    #ifdef WIN32 // WIN32 is defined by all Windows 32 compilers, but not by others.
    #include <windows.h>
    #else
    #include <unistd.h>
    #endif
    tu peux faire comme ça, et même utiliser un ifdef pour les WIN64, LINUX, ...)

    Dsl ça ne résout pas le problème mais ça montre que tu peux inclure windows.h

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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