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

C++/CLI Discussion :

Redirection de la sortie standard d'une console


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Redirection de la sortie standard d'une console
    Bonjour,

    Je suis sous microsoft visual studio 10 en C++ Winform.

    J'aimerais exécuter une ligne de commande, à partir du C++, qui génère une sortie standard.
    Ce que je souhaiterais c'est obtenir cette sortie std dans une textbox, soit en temps réel soit une fois la commande terminée.

    Cette la durée de traitement de cette commande peut être assez longue, donc j'aimerais aussi avoir une barre de progression.

    Après plusieurs recherches, j'ai pensé faire quelque chose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
     
    		//envoi de la commande pour analyser le fichier avi
    		//system(ccmd);
                    //progressBar1->PerformStep();
     
    		Process^ compiler = gcnew Process;
    		compiler->StartInfo->FileName = "cmd";
    		compiler->StartInfo->Arguments = "ffmpeg -i"; //"ffmpeg -i \""+fichierPath+"\" -vf blackdetect=d=0.5:pic_th=0.70:pix_th=0.00 -f null -";
    		compiler->StartInfo->UseShellExecute = false;
    		compiler->StartInfo->RedirectStandardOutput = true;
    		compiler->Start();
    		textBox2->AppendText(compiler->StandardOutput->ReadToEnd());
    		compiler->WaitForExit();
    }
    Le souci c'est que cette solution ne me permet pas d'obtenir la sortie std après l'exécution de la commande avec les arguments qui lui sont passés.
    En effet j'obtiens uniquement :

    Microsoft Windows XP [version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    D:\Documents and Settings\user\Bureau\blackDetect\blackDetect>
    J'ai également essayé d'ajouter le code ci-dessous mais j'ai une erreur à l'execution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		// Use a stream writer to synchronously write the sort input.
    		StreamWriter^ sortStreamWriter = compiler->StandardInput;
    		// Start the asynchronous read of the sort output stream.
    		compiler->BeginOutputReadLine();

    Merci d'avance pour votre aide!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pourquoi lancer "cmd" et pas directement "ffmpeg" ?

    Il faut attendre la fin de l'exécution pour avoir le résultat dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		compiler->WaitForExit();
    		textBox2->AppendText(compiler->StandardOutput->ReadToEnd());

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Aaaah en effet, je sais pas pourquoi je m'accroche à la console..!
    J'ai donc suivi vos conseils et j'utilise donc le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	Process^ compiler = gcnew Process;
    		compiler->StartInfo->FileName = "ffmpeg";
    		compiler->StartInfo->Arguments = " -i";
    		compiler->StartInfo->UseShellExecute = false;
    		compiler->StartInfo->RedirectStandardOutput = true;
    		compiler->Start();
    		compiler->WaitForExit();
    		textBox2->AppendText(compiler->StandardOutput->ReadToEnd());
    Mais toujours rien dans la textbox2.
    J'ai l'impression que les arguments ne passe pas
    Normalement un "ffmpeg -i" dans la console donne comme résultat la version de ffmpeg.

    Merci pour votre aide!

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    C'est dans la sortie standard ou dans la sortie d'erreur ?
    Vérifiez en faisant un pipe différent pour la sortie standard et la sortie des erreurs.

    EDIT: en cherchant autre chose, je suis tombé sur un exemple complet. ;-)

    http://www.digitalcoding.com/Code-Sn...-from-Net.html

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 105
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Je vous conseille déjà de lancer une console avec votre programme (qui comporte bien une IHM) et s'assurer que la commande appelée à partir de votre programme affiche bel et bien quelques choses. Afin de faire ceci aller dans la propriété du projet vcxproj de votre programme principale (s'il y en a d'autres dans la solution) --> Edition des liens --> Système --> sous système et choisissez Console.

    Passe nous une copie de ce qui s'affiche sur la console.

    Bon courage !

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Du coup vu que je ne trouvais pas, je suis passé en JAVA ou j'ai pu utiliser un Buffer et lire correctement la sortie d'erreur.

    C'est dans la sortie standard ou dans la sortie d'erreur ?
    Effectivement, ffmpeg met les résultats intéressants sur la sortie d'erreur.. je lisais donc la mauvaise sortie comme l'avais prédit bacelar!

    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2007, 02h26
  2. Recupération d'un sortie standard via une commande ssh.
    Par yanndan dans le forum Administration système
    Réponses: 1
    Dernier message: 28/08/2006, 16h56
  3. Redirection de la sortie standard
    Par ankou82 dans le forum SDL
    Réponses: 20
    Dernier message: 29/05/2006, 13h54
  4. [Débutant(e)] Redirection de la sortie standard
    Par salber dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 17/06/2005, 15h34
  5. redirection de la sortie standard
    Par sorari dans le forum C++
    Réponses: 8
    Dernier message: 19/05/2005, 11h47

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