Funktionreferenz


StderrRead

Beschreibung anzeigen in

Liest eine Anzahl von Zeichen aus einem STDERR-Stream eines zuvor gestarteten Child-Prozesses ein.

StderrRead ( process_id [, peek = False [, binary = False]] )

Parameter

process_id Die Prozess-ID eines Child-Prozesses, wie aus einem vorigen Aufruf von Run zurückgegeben.
peek [optional] Wenn True, werden die von der Funktion eingelesenen Zeichen nicht aus dem Stream entfernt.
binary [optional] Wenn True, werden die Daten als Binärwerte, wenn False als Text gelesen (Voreinstellung ist Text).

Rückgabewert

Erfolg: Die gelesenen Daten. @extended gibt die Anzahl der gelesenen Bytes zurück.
Fehler: Setzt das @error Flag auf ungleich null wenn: EOF wurde erreicht, STDERR wurde an diesen Prozess nicht weitergeleitet oder ein anderer Fehler ist aufgetreten.

Bemerkungen

StderrRead() liest aus dem Konsolen-Standard-Error-Stream eines Child-Prozesses, der normalerweise von Konsolen-Applikationen genutzt wird, um Fehler auf dem Bildschirm auszugeben. Beim Aufruf von Run() für den Child-Prozess, von dem man lesen möchte, muss der STD-I/O-Parameter das $STDERR_CHILD-Flag (Integer 4) enthalten, damit diese Funktion richtig arbeitet (siehe die Run Funktion).
StderrRead() wartet nicht, sondern kehrt umgehend zurück. Um alle Daten aus dem Stream zu lesen, muss StderrRead() in einer Schleife aufgerufen werden.
Wenn mit peek = True aufgerufen, werden die Daten des Error-Streams (normal) gelesen, aber nicht aus dem Stream-Buffer entfernt. Es ist zu beachten, dass alle Zeichen nach einem "peek" noch im Stream vorhanden sind und beim nächsten Lesevorgang erneut zurückgegeben werden.
Normalerweise werden die Daten als Text zurückgegeben, mit der Binary-Option können die Daten als Binärwert gelesen werden.

Verwandte Funktionen

Run, RunAs, StdinWrite, StdioClose, StdoutRead

Beispiel

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $iPID = Run(@ComSpec & " /c DIR Example.au3", @SystemDir, @SW_HIDE, BitOR($STDERR_CHILD, $STDOUT_CHILD))
    Local $sOutput = ""
    While 1
        $sOutput &= StdoutRead($iPID)
        If @error Then ; Beendet die Schleife falls der Prozess beendet wurde oder StdoutRead einen Fehler zurückgibt.
            ExitLoop
        EndIf
        MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)
    WEnd

    $sOutput = ''
    While 1
        $sOutput &= StderrRead($iPID)
        If @error Then ; Beendet die Schleife falls der Prozess beendet wurde oder StderrRead einen Fehler zurückgibt.
            ExitLoop
        EndIf
        MsgBox($MB_SYSTEMMODAL, "Stderr Read:", $sOutput)
    WEnd
EndFunc   ;==>Example