Funktionreferenz


StdoutRead

Beschreibung anzeigen in

Liest vom STDOUT-Stream eines zuvor gestarteten Child-Prozesses ein.

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

Parameter

process_id Die Prozess-ID eines Child-Prozesses, wie bei einem vorigen Aufruf von Run zurückgegeben
peek [optional] Wenn True, entfernt die Funktion die eingelesenen Zeichen nicht aus dem Stream
binary [optional] Wenn True, liest die Funktion die Daten als binär anstatt als Text (Standard ist Text)

Rückgabewert

Erfolg: Die gelesenen Daten. @extended enthält die Anzahl der gelesenen Bytes.
Fehler: Setzt das @error Flag auf ungleich null, wenn EOF erreicht ist, STDOUT nicht an diesen Prozess weitergeleitet wurde oder ein anderer Fehler aufgetreten ist.

Bemerkungen

StdoutRead() liest aus dem Konsolen-Standard-Ausgabe-Stream eines Child-Prozesses, der normalerweise von Konsolen-Applikationen genutzt wird, um Text auf dem Bildschirm auszugeben. Beim Aufruf von Run() für den Child-Prozess, aus dem man lesen möchte, muss der STD-I/O-Parameter den Wert $STDOUT_CHILD (2) enthalten, damit diese Funktion richtig arbeitet (siehe die Run-Funktion).
StdoutRead() blockiert den Stream nicht, sondern kehrt sofort zurück. Sollen alle Daten ermittelt werden, muss die Funktion in einer Schleife aufgerufen werden.
"Peeking" auf dem Stream entfernt die Daten nicht aus dem Puffer, gibt aber die verfügbaren Daten normal zurück.
Standardmäßig werden Daten im Textformat zurückgegeben. Wird die Binary-Option verwendet, so werden die Daten im Binärformat zurückgegeben.

Verwandte Funktionen

Run, RunAs, StderrRead, StdinWrite, StdioClose

Beispiel

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3> ; wird für nur für _ArrayDisplay benötigt.

; Zeigt rekursiv die Dateien innerhalb eines Verzeichnisses an.
Example()

Func Example()
    Local $sFilePath = @ScriptDir ; Dursucht das aktuelle Skriptverzeichnis
    Local $sFilter = "*.*" ; Sucht nach allen Dateien im aktuellen Verzeichnis. Für eine Liste von erlaubten Platzhaltern (Wildcards) durchsucht die Hilfe-Datei nach 'Wildcards'.

    ; Wenn der Dateipfad kein Verzeichnis ist, so wird aus der 'Example'-Funktion gesprungen.
    If Not StringInStr(FileGetAttrib($sFilePath), "D") Then
        Return SetError(1, 0, 0)
    EndIf

    ; Entfernt nachfolgende Backslashes und fügt ein einziges Backslash hinzu.
    $sFilePath = StringRegExpReplace($sFilePath, "[\\/]+\z", "") & "\"

    #cs
        Kommandozeilenparameter für DIR:
        /B - Einfache Ausgabe.
        /A-D - Sucht nach allen Dateien und ignoriere Verzeichnisse.
        /S - Sucht innerhalb von Unterverzeichnissen.
    #ce
    Local $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /A-D /S', $sFilePath, @SW_HIDE, $STDOUT_CHILD)
    ; Um nach Dateien zu suchen welche Unicodezeichen enthalten muss der /U Kommandozeilenparameter verwendet werden.

    ; Es wird solange gewartet, bis der Prozess mit der Prozess-ID, welche von Run zurückgegeben wurde, beendet ist.
    ProcessWaitClose($iPID)

    ; Liest den Stdout Stream der Prozess-ID welche von Run zurückgegeben wurde. Das kann auch in einer while-Schleife geschehen. Siehe dazu das Beispiel für StderrRead.
    Local $sOutput = StdoutRead($iPID)

    ; Verwendet StringSplit um die Ausgabe von StdoutRead in ein Array zu teilen. Alle Wagenrückläufe (@CRLF) werden entfernt und @CRLF (Zeilenvorschub) wird als Trennzeichen verwendet.
    Local $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@LF)), @LF)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "", "Es sieht so aus als ob es einen Fehler gab während der Suche nach allen Dateien im aktuellen Verzeichnis.")
    Else
        ; Zeigt die Ergebnisse an.
        _ArrayDisplay($aArray)
    EndIf
EndFunc   ;==>Example