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

Mono .NET Discussion :

[Mono/C#] Comment rediriger le output d'une commande vers un textview ?


Sujet :

Mono .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Par défaut [Mono/C#] Comment rediriger le output d'une commande vers un textview ?
    Bonjour à tous!
    Bonne vacances au étudiants

    Bon, le coeur du problème...
    J'écris une petite application qui aura comme but de piloter le programme wvdial qui fonctionne en mode console sous linux. Ce programme sert à la connection d'un modem basse vitesse.

    Lorsqu'il est lancé en mode console beaucoup d'informations utiles sont affichés.
    Je veux récupéré ces infos et les afficher dans un textview. Ce textview est en GTK# / mono...

    Présentement, lorsque je lance mon application, elle se ferme de sitôt.
    Voici mon code. J'ai remplacé le wvdial par un ping pour éviter le lancement du modem à toutes les fois...

    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
    16
    17
    18
    19
    20
    21
    22
    23
     
        protected virtual void btnConnect_Click(object sender, System.EventArgs e)
        {
            // On désactive le shell
            ProcWvdial.StartInfo.UseShellExecute = false;
            // On redirige la sortie standard
            ProcWvdial.StartInfo.RedirectStandardOutput = true;
            ProcWvdial.StartInfo.FileName = "ping -c 3";
            //ProcWvdial.StartInfo.FileName = "sudo /usr/bin/wvdial";
            ProcWvdial.StartInfo.Arguments = "www.google.com";
            // Démarrage de la commande
            ProcWvdial.Start();
            // Lecture de la sortie de la commande
            string output = ProcWvdial.StandardOutput.ReadToEnd();
     
            Gtk.TextBuffer buffer;
            buffer = textview1.Buffer;
            buffer.Text = output;
     
            //Console.WriteLine(output);
            // Attente de la fin de la commande
            ProcWvdial.WaitForExit();
        }
    J'ai repris le code de la FAQ

    J'ai également un autre problème pour interrompre la connection ( ProcWvdial.Kill(); ) mais on verra plus tard...une chose à la fois

    Merci de votre aide!

    @+

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    salut .

    tu n'as pas un message d'erreur ? de plus tu fait appels à une commande admin (sudo ping ...) est tu sur que ça soit autorisé ?

    Je n'ai pas (encore) étudié le model de sécurité de Mono mais je ne pense pas que lancer des commandes root soit accepté par défaut .

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Par défaut
    Bonjour Dev01.

    Le message qui m'est donné par monodevelop lors du crash:
    Unhandled Exception: System.ComponentModel.Win32Exception: Cannot find the specified file
    in [0x001f5] (at /mnt/data/tmp/archcvs/extra/devel/mono/src/mono-1.1.15/mcs/class/System/System.Diagnostics/Process.cs:959) System.Diagnostics.Process:Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
    in [0x00040] (at /mnt/data/tmp/archcvs/extra/devel/mono/src/mono-1.1.15/mcs/class/System/System.Diagnostics/Process.cs:996) System.Diagnostics.Process:Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
    in [0x00007] (at /mnt/data/tmp/archcvs/extra/devel/mono/src/mono-1.1.15/mcs/class/System/System.Diagnostics/Process.cs:1003) System.Diagnostics.Process:Start ()
    in (wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
    in [0x00052] (at /home/shaika-dzari/Projects/Wvc/Wvc/MainWindow.cs:43) MainWindow:btnConnect_Click (System.Object sender, System.EventArgs e)
    in (wrapper delegate-invoke) System.MulticastDelegate:invoke_void_object_EventArgs (object,System.EventArgs)
    in <0x00093> GLib.Signal:voidObjectCallback (IntPtr handle, IntPtr gch)
    in (wrapper native-to-managed) GLib.Signal:voidObjectCallback (intptr,intptr)
    in <0x00000> <unknown method>
    in (wrapper managed-to-native) Gtk.Application:gtk_main ()
    in <0x00007> Gtk.Application:Run ()
    in [0x00011] (at /home/shaika-dzari/Projects/Wvc/Wvc/Main.cs:14) Wvc.MainClass:Main (System.String[] args)
    Pour sudo, j'ai créé une règle dans /etc/sudoers pour autorisé tous les utilisateurs à lancé la commande sudo wvdial sans mot de passe.(oui je sais, c'est pas secure...)

    Merci de ton aide!

    @+

    Edit: Ce message est avec le lancement du ping vers google. J'ai pas encore essayé avec wvdial mais je suppose que le résultat serait le même.

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Tu travail bien sous Linux ?

    Est tu sur que le fichier vers lequel ou depuis lequel tu veux rediriger existe bien ?

    tu utilise bien stdin stdout ou stderr ?

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Par défaut
    Bonjour Dev01

    Oui, je suis bien sous linux. J'utilise archlinux 0.7.2 / kernel 2.6.16 avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    shaika-dzari:$ mono --version                                                 ~
    Mono JIT compiler version 1.1.15, (C) 2002-2005 Novell, Inc and Contributors. www.mono-project.com
            TLS:           normal
            GC:            Included Boehm (with typed GC)
            SIGSEGV:       normal
            Disabled:      none
    Ainsi que monodevelop 0.11.

    Mon problème réside peut-être dans la méthode au lieu d'une quelquonque erreur.
    Ce que je veux c'est récupéré l'affichage console, exemple, de la commande ping www.google.ca et la faire apparaître dans ma fenètre; le textview finalement.

    Si tu veux jeter un oeil au projet (il est assez simple...), tu peux le télécharger ici:
    http://perso.b2b2c.ca/mangaquebec/devel/Wvc.tar.bz2

    tu utilise bien stdin stdout ou stderr ?
    Je suis désolé mais je ne sais pas ce que c'est.

    Merci encore de ton aide.

    @+

  6. #6
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    j'ai trouvé ton erreur .

    il ne faut pas passer les arguments d'un programme dans le FileName .

    Tu as une propriété Arguments je crois dans StartInfo qui est faite pour ça .

    Essai et tiens moi au courant.

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

Discussions similaires

  1. [Batch] Rediriger la sortie d'une commande vers une variable
    Par Merwyn dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/09/2012, 17h30
  2. Réponses: 3
    Dernier message: 11/03/2008, 00h22
  3. Réponses: 8
    Dernier message: 19/09/2007, 16h51
  4. Réponses: 22
    Dernier message: 09/12/2005, 21h27
  5. Rediriger les erreurs d'une commande
    Par GLDavid dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2005, 21h03

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