Augabe auf SciTE-Konsole im Skript verarbeiten?

  • Hallo,

    ich rufe in meinem Skript ein batch file über ein CMD-Window auf (versteckt). Die Ausgaben des Batch-Files erscheinen im Ausgabefenster von SciTE. Gibt es nun eine Möglichkeit, die Ausgabe auch im Skript zu verarbeiten? ConsoleRead() war hier mein erster Gedanke, aber wenn ich mit ConsoleRead() parallel zu der Ausgabe in der SciTE-Konsole arbeite und mir den Inhalt auf einer MsgBox ausgeben lassen möchte, ist kein Inhalt vorhanden.
    Liegt das daran, dass die SciTE-Konsole den Stream schon leert und somit eine Ausgabe im Skript nicht funktioniert?

    Gruß
    seventh_son

  • Die SciTE-Konsole kann man mit Lua elegant auslesen. Ich teste nachher mal, ob sich das mit meinem LuaInline aus einem AutoItskript umsetzen läßt.

    Prima, danke.
    Kannst Du auch die Frage beantworten, warum das ReadConsole() in diesem Fall in's Leere läuft? Wenn ich das Skript kompiliere und außerhalb von SciTE laufen lasse, bekomme ich die sonst in die SciTE-Konsole ausgegebenen Daten ebenfalls nicht. Ich nehme an, dass die Ausgabe meines Child-Prozesses (batch file in Konsole) nicht mit ReadConsole() erreichbar ist und die Ausgabe im SciTE anders bezogen wird.

  • Hier noch der Code:

    Global $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE, $STDIN_CHILD)
    ;Wait for CMD to be opened
    WinWait("C:\Windows\system32\cmd.exe", "", 15)
    Local $data
    While 1
    $data &= ConsoleRead()

    MsgBox(0, "Gefunden:", $data)
    WEnd


    Das gestartete batch-File schreibt automatisch einen Haufen Daten in die Ausgabe. Wie gesagt, Wenn ich das Skript im SciTE ausführe, sehe ich diese Daten im Konsolenfenster. Die MsgBoxen sind aber leer. Auch wenn das Skript als .exe gestartet wird.

    Einmal editiert, zuletzt von seventh_son (28. Oktober 2015 um 17:12)

  • Viel zu kompliziert gedacht, geht ganz simpel:

    AutoIt
    $sOutput = ControlGetText('[CLASS:SciTEWindow]', '', '[CLASS:Scintilla; INSTANCE:2]')

    Das ist ja super schlank. Danke!

    Dennoch frage ich mich, wo jetzt der Unterschied zwischen ConsoleRead() und der Ausgabe in das Fenster ist. Liest ConsoleRead() vielleicht nur tatsächliche Tastendrücke ein, nicht aber Eingaben, die von einem anderen Cmd-Fenster-Prozess kommen?

    Einmal editiert, zuletzt von seventh_son (28. Oktober 2015 um 17:23)

  • ich rufe in meinem Skript ein batch file über ein CMD-Window auf (versteckt). Die Ausgaben des Batch-Files erscheinen im Ausgabefenster von SciTE.

    Mit Sicherheit nicht, wenn es im Batchfile bzw. im dort aufgerufenen Programm keine Umleitung nach Scite gibt!
    Daher: Script und Batchfile posten!
    Btw. werden Daten aus der CMD entweder aus dem STDOUT oder STDERR-Stream ausgelesen, je nach gesetztem Flag vom RUN().

    Das $STDIO_INHERIT_PARENT-Flag gäbe zwar den Inhalt der CMD/Batch an Scite bzw. an die Console des aufrufenden Scriptes weiter, aber es würde von gelinde gesagt geistiger Umnachtung herrühren, dieses Flag explizit zu setzen und dann hier einen entsprechenden Thread zu eröffnen....und das wollen wir ja dem TE nicht unterstellen ;)

    Folgendes Testscript, in der test.bat steht eine Zeile: dir c:\ /N

  • Das entsprechende Snippet des Skripts:


    AutoIt
    Global $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE, $STDIN_CHILD)
    ;Wait for CMD to be opened
    WinWait("C:\Windows\system32\cmd.exe", "", 15)
    [....]


    StartDirectUpdater.bat enthält einen Haufen auskommentierte Zeilen in der Form

    rem java -jar DirectUpdaterViaContact.jar [...]

    sowie eine einkommentierte Zeile

    java -jar DirectUpdaterViaContact.jar [...}

    Die Ausgabe im SciTE sieht dann wie folgt aus:


    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\xxx\Documents\ReflashTest.au3"

    [...]
    U:\Eigene Dateien\Tools\swUpdater>rem java -jar DirectUpdaterViaContact.jar [...]

    U:\Eigene Dateien\Tools\swUpdater>rem java -jar DirectUpdaterViaContact.jar [...]

    U:\Eigene Dateien\Tools\swUpdater>rem java -jar DirectUpdaterViaContact.jar [...]

    U:\Eigene Dateien\Tools\swUpdater>java -jar DirectUpdaterViaContact.jar [...]


    Könnte es sein, dass SciTE hier nicht die Konsole, sondern den ErrorStream bekommt?

    Das Flag kannte ich nicht und habe es natürlich nicht gesetzt.

    Einmal editiert, zuletzt von seventh_son (29. Oktober 2015 um 10:08)