Konsolenoutput an Textbox umleiten?



  • Doku lesen?

    long wxExecute(const wxString& command, wxArrayString& output, int flags = 0)

    wxArrayString output;
    wxExecute(wxString(wxT("g++ -Wall -o test test.cpp")), output, wxEXEC_ASYNC);
    //danach das Array in die TextCtrl ausgeben....
    

    rya.



  • die mehode hab ich schon gefunden nur erfüllt sie nicht ganz meinen zweck. Der output von dem Programm das ich aufrufe soll "fast" zeitgleich in dem TextCtrl angezeigt werden. Wenn ich das aber mit dem wxStringArray mache geht das ja erst wenn das Programm beendet ist.



  • Dann nimm die Variante, in der eine Klasse wxProcess verlangt wird. Leite eine Klasse von wxProcess ab und übergib eine Instanz davon. Anhand der Callbacks kannst du das dann ziemlich zeitnah ausgeben.
    http://docs.wxwidgets.org/stable/wx_wxprocess.html
    rya.



  • wie meinst du das mit den callbacks? Das Problem ist dass kein event ausglöst wird wenn daten auf dem stream vorhanden sind. Wie soll ich das denn dann prüfen ob was da ist geht ja nur pollend und das dann nur mit wxTimer ist alles bischen schlecht gelöst find ich.



  • Kann ich jetzt nicht testen, werd das aber nachholen.
    Aber was genau willst du denn machen? Vllt gibts eine Alternativ Lösung...
    rya.



  • ich will ein kleines script aus dem Programm aus starten und die ausgabe von dem script würde ich gern in meinem Programm angezeigt bekommen.



  • Und was macht das Script? Was ist das für ein Script? Batch? M$ PowerShell? Bash? Lass dir doch bitte nicht alles aus der Nase ziehen :).
    rya.



  • ist für testzwecke nur ein kleines bash script mit ein par echos und sleeps drinne um zu gucken ob das mit dem capturen vom output klappt. Hab es bisher nur recht bescheiden hinbekommen in dem script sind 5 echo zeilen drin kann aber irgendwie nur 3 empfangen.



  • Ok, also wenns wirklich darum geht...
    Hab eben nochmal die Doku zu wxProcess gelesen (ja, heute is bei uns echt tote hose *gg*):

    http://docs.wxwidgets.org/stable/wx_wxprocess.html#wxprocessisinputavailable

    Returns true if there is data to be read on the child process standard output stream. This allows to write simple (and extremely inefficient) polling-based code waiting for a better mechanism in future wxWidgets versions.

    Also, du hast quasi keine andere chance, ausser die Meethode mit dem ArrayString zu nehmen oder eben zu pollen. Das Ding ist noch nicht ganz fertig wie es aussieht.

    Aber nochmal die Frage:
    Warum Bashscripts? wxWidgets ist Crossplatform und damit nimmst du diese Fähigkeit von dem Programm. Was genau sollte das Script machen oder was hast du vor? 🙂



  • ich soll ein tool schreiben das eine xml datei ausliest und auswertet und nach den daten die in dem xml script drinstehen gewisse optionen zur verfügung stellen und je nach auswahl der optionen soll das script mit den optionen aufgerufen werden. Das script erstellt dann aus den optionen ein packet. Den output von dem script hätte ich halt gerne in meinem tool gehabt. Bisher mache ich es so dass ich ein xterm -e script per wxexecute aufrufe um den output zu sehen.


Anmelden zum Antworten