Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] QProcess et espaces

Sujet résolu
    27 août 2011 à 14:12:43

    Bonjour à tous,

    je viens vous demander de l'aide car j'essaie de lancer un QProcess dans lequel se trouvent des espaces, mais ça ne fonctionne pas.

    J'ai essayé toutes les commandes suivantes, sans résultat :
    QProcess *process = new QProcess();
    


    process->start("C:\\Windows\\system32\\cmd.exe /c \"C:\\Users\\Simon\\Logiciels\\Mon programme\\ressources\\rtmpdump.exe\" -r <italique>url de la video</italique> -| \"C:\Program Files\VideoLAN\VLC\vlc.exe\" -");
    


    process->start("C:\\Windows\\system32\\cmd.exe", QStringList() << "/c" << "C:\\Users\\Simon\\Logiciels\\Mon programme\\ressources\\rtmpdump.exe" << "-r" << "<italique>url de la video</italique>" << "-|" << "C:\Program Files\VideoLAN\VLC\vlc.exe" << "-");
    


    Mais le processus ne lance que cette commande :
    process->start("C:\\Windows\\system32\\cmd.exe /c \"C:\\Users\\Simon\\Logiciels\\Mon");
    


    J'ai ensuite testé ceci (vu dans la doc Qt) :
    process->start("C:\\Windows\\system32\\cmd.exe /c \"\"\"C:\\Users\\Simon\\Logiciels\\Mon programme\\ressources\\rtmpdump.exe\"\"\" -r <italique>url de la video</italique> -| \"C:\Program Files\VideoLAN\VLC\vlc.exe\" -");
    


    Mais CMD me dit que \"C:\Users\Simon\Logiciels\Mon programme\ressources\rtmpdump.exe\" n'est pas une commande interne ou externe...

    Je tiens à signaler que je suis OBLIGE d'éxécuter CMD.

    Que faire ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
    22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
      28 août 2011 à 14:56:47

      up
      • Partager sur Facebook
      • Partager sur Twitter
      22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
        29 août 2011 à 16:23:07

        up
        • Partager sur Facebook
        • Partager sur Twitter
        22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
          29 août 2011 à 16:56:19

          http://www.qtcentre.org/threads/12915- [...] lank-spaces-!

          google: mot clés: "Qprocess param space" 2ème lien.

          Le temps de deux up, je pense que tu pouvais le faire ;)
          • Partager sur Facebook
          • Partager sur Twitter
            30 août 2011 à 10:07:24

            Citation : Patatasux

            http://www.qtcentre.org/threads/12915- [...] lank-spaces-!

            google: mot clés: "Qprocess param space" 2ème lien.

            Le temps de deux up, je pense que tu pouvais le faire ;)



            Merci, mais ça ne résous pas mon problème...
            • Partager sur Facebook
            • Partager sur Twitter
            22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
              30 août 2011 à 10:41:15

              En quoi ça ne le résout pas? ça ne marche pas?
              • Partager sur Facebook
              • Partager sur Twitter
                30 août 2011 à 12:21:45

                Non, ça ne marche pas.

                Voir mon premier message
                • Partager sur Facebook
                • Partager sur Twitter
                22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                  30 août 2011 à 13:52:15

                  donne moi le code que tu as essayé après être allé voir le lien que je t'ai proposé.
                  Je ne vois pas dans ton premier message un code similaire.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 août 2011 à 14:37:49

                    J'ai testé mes 3 codes en remplaçant
                    C:\\Users\\Simon\\Logiciels\\Mon programme\\
                    
                    par
                    QDir::setCurrent()
                    
                    et j'ai toujours le même problème.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                      30 août 2011 à 14:40:28

                      bool setCurrent ( const QString & path )

                      as tu testé la valeur de retour?
                      et donne nous le code exact que tu as essayé stp. Qqn as essayé cette solution et s'en ai sortie, il n'y a pas de raison que ce soit différent pour toi.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 août 2011 à 11:56:57

                        setCurrent fonctionne, ce n'est pas le problème, mais contient un espace qui fait que le processus ne fonctionne pas (voir 1er message)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                          31 août 2011 à 13:44:18

                          ouai, mais alors le pb, c'est le process que tu essaies de lancer. Pas le lanceur.
                          Si le processus cible n'est pas capable un argument qui contient des espaces, je ne pense pas que QProcess puisse le faire à sa place.

                          Enfin, moi ce que j'avais compris, c'est que tu voulais lancer un programme qui se trouvait à un chemin qui contient des espaces. Si c'est juste cela, alors le lien que je t'ai donné devrait résoudre ton pb. Tu fais un setCurrent() à l'endroit où se trouve le programme, et le lance en utilisant un chemin relatif (chemin courant)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 septembre 2011 à 2:20:16

                            Avec le "|" de toute façon, il y a peu de chance que ça fonctionne.
                            Par contre, si tu lances cmd.exe seul puis que tu écris les commandes sur l'entrée standard du QProcess (suivies d'un " ; exit", à la fin pour que ça quitte) que ça devrait faire à peu près la même chose, sans oublier "\n" à la fin de la ligne pour que la commande soit lancée.

                            Tu peux aussi créer un fichier .bat, pour y mettre les commandes, puis tu lances ce fichier avec "cmd.exe /c call tonFichier.bat".
                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 septembre 2011 à 11:55:23

                              Citation : alexisdm

                              Avec le "|" de toute façon, il y a peu de chance que ça fonctionne.
                              Par contre, si tu lances cmd.exe seul puis que tu écris les commandes sur l'entrée standard du QProcess (suivies d'un " ; exit", à la fin pour que ça quitte) que ça devrait faire à peu près la même chose, sans oublier "\n" à la fin de la ligne pour que la commande soit lancée.

                              Tu peux aussi créer un fichier .bat, pour y mettre les commandes, puis tu lances ce fichier avec "cmd.exe /c call tonFichier.bat".



                              Le problème ne vient pas du | mais de l'espace. sans espace dans le chemin, ça fonctionne...
                              • Partager sur Facebook
                              • Partager sur Twitter
                              22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                1 septembre 2011 à 12:46:42

                                En fait, j'étais parti sur ce qui est indiqué , mais après relecture, peut-être que le point 2, signifie que tu dois entourer toute la ligne après /c de guillemets et chaque nom long avec d'autres guillemets:
                                "C:\\Windows\\system32\\cmd.exe /c \"\"C:\\Users\\Simon\\Logiciels\\Mon programme\\ressources\\rtmpdump.exe\" -r <italique>url de la video</italique> -| \"C:\Program Files\VideoLAN\VLC\vlc.exe\" -\""

                                Sinon, tu mets "C:\Users\Simon\Logiciels\Mon programme\ressources\" et "C:\Program Files\VideoLAN\VLC" dans la variable d'environment PATH (avec QProcess::setProcessEnvironment) avant de lancer QProcess (mais c'est vraiment plus simple de lancer cmd tout seul puis les commandes à l'intérieur).
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 septembre 2011 à 15:16:58

                                  Citation : alexisdm

                                  En fait, j'étais parti sur ce qui est indiqué , mais après relecture, peut-être que le point 2, signifie que tu dois entourer toute la ligne après /c de guillemets et chaque nom long avec d'autres guillemets:
                                  "C:\\Windows\\system32\\cmd.exe /c \"\"C:\\Users\\Simon\\Logiciels\\Mon programme\\ressources\\rtmpdump.exe\" -r <italique>url de la video</italique> -| \"C:\Program Files\VideoLAN\VLC\vlc.exe\" -\""



                                  Le processus se lance, mais la commande ne marche plus...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                    2 septembre 2011 à 16:30:48

                                    up
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                      3 septembre 2011 à 18:46:04

                                      up
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                        4 septembre 2011 à 19:10:38

                                        up
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                          6 septembre 2011 à 18:11:13

                                          up
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                            7 septembre 2011 à 21:19:17

                                            up
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                              11 septembre 2011 à 19:59:54

                                              up
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.
                                                11 septembre 2011 à 20:31:03

                                                Pourquoi et comment es-tu obligé d'utiliser cmd ?
                                                process->start("C:\\Windows\\system32\\cmd.exe");
                                                if(process->waitForStarted())
                                                {
                                                    process->write(
                                                        "\"C:\\Users\\Simon\\Logiciels\\Mon programme"
                                                        "\\ressources\\rtmpdump.exe\" "
                                                        "-r <italique>url de la video</italique> - |"
                                                        "\"C:\Program Files\VideoLAN\VLC\vlc.exe\" - ; exit\n");
                                                }
                                                

                                                Ou
                                                QProcess *rtmpdump = new QProcess;
                                                QProcess *vlc = new QProcess;
                                                
                                                rtmpdump->setStandardOutputProcess(vlc); // le pipe
                                                
                                                rtmpdump->start(
                                                    "C:\\Users\\Simon\\Logiciels\\Mon programme\\ressources\\"
                                                    "rtmpdump.exe", QStringList() << "-r" << "urldelavideo" << "-");
                                                
                                                vlc->start("C:\Program Files\VideoLAN\VLC\vlc.exe", QStringList("-"));
                                                
                                                Je n'ai pas testé sous windows, mais cette discussion semble indiquer que ça fonctionne.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  19 septembre 2011 à 18:40:47

                                                  Merci, ca fonctionne
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  22 ans, titulaire d'un Bac S Sciences de l'Ingénieur (Mention Bien) obtenu en 2013. Étudiant à l'IMT Lille Douai en double diplôme à EURECOM.

                                                  [Qt] QProcess et espaces

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown