Konsolenanwendung mit "StdoutRead" nur mitlesen

  • Hallo Zusammen,
    ich habe eine Konsolenanwendung die ich nur mitlesen möchte. Mit "StdoutRead" den Stream auslesen ist kein Problem. Aber was ich auslese, wird nicht mehr in der Konsolenanwendung angezeigt. Ich habe auch schon versucht den Stream via "StdinWrite" in die Konsolenanwendung zurück zu schreiben, aber leider ohne erfolg.


    Gibt es eine Möglichkeit einen Stream nur mit zu lesen?


    Danke für eure Hilfe.


    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Hallo BugFix

    - Es läuft eine Konsolenanwendung in eigener Konsole
    - Der Outstream soll in diese Konsole geschrieben werden aber auch für dich in einen eigenen Output dupliziert werden.
    Ist das korrekt?


    Ja, das ist korrekt.

    Beispiel, ist etwas schwierig, da es eine node.js Anwendung ist und ich
    davon ausgehe, das du nicht alles dafür installieren möchtest?!

    Hier ein Beispiel wie es vom Prinzip her läuft:

    $PID=Run($INI_PATH_CONSOLE, "", @SW_SHOW, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
     $SOR=StdoutRead($PID)
     ConsoleWrite($SOR &@CRLF)
    WEnd


    Vielen Dank für deine Hilfe.


    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

    2 Mal editiert, zuletzt von Homer J. S. (7. Januar 2016 um 13:12)

  • Mir fallen 2 Möglichkeiten ein:

    1) "Eigenes" Consolenfenster
    Du startest Run mit dem Parameter @SW_HIDE und erstellst selber eine GUI in welcher du deie gelesenen Daten ausgibst


    2) Mit einer Pipe auf ein eigenes externes Tool weiterleiten
    Zunächst kompilierst du dieses Script als Pipe.exe:

    Im Hauptscript erstellst du eine NamedPipe.
    Dessen Handle übergibst du an Pipe.exe und mit dem Zeichen "|" leitest du den Output an Pipe.exe weiter
    In etwa so:


    Pipe.exe bekommt nun via StdIn die Daten, schreibt diese in die NamedPipe und parallel dazu wieder in die Console
    Das Haupscript erhält die Daten über die NamedPipe.

    "|" leitet den Output weiter an Pipe.exe
    "2>&1" leitet auch den StdErr an StdOut um, und somit auch an Pipe.exe

    Damit das Hauptscript weiß, wann die Daten zu Ende sind, schreib ich "0x1A" ans Ende der Pipe.
    Wahrscheinlich gibts eine sicherere Methode, aber da bin ich der falsche Ansprechpartner... :rolleyes:

    Edit:
    Kommt auch drauf an, wass du erreichen willst!
    Evtl reicht es doch auch, wenn du im Hauptscript mit RunWait startest und die Auswertung komplett in Pipe.exe stattfindet!
    Dann würdest du dir den Rückschliff via NamedPipe ersparen!

    • Offizieller Beitrag

    Von Interesse wäre noch:
    Ist die Ausführung in der Konsole von längerer Dauer und musst du parallel mitlesen? (halte ich eigentlich für wenig wahrscheinlich)
    Oder wird einfach ein Befehl in kurzer Zeitspanne abgearbeitet und du brauchst das Ergebnis? - Dann leite doch die Ausgabe in eine Textdatei um und schreibe anschliessend den Dateiinhalt wieder in die Konsole.