Функция StderrRead

         Описание функции


StderrRead

Читает из потока ошибок STDERR ранее запущенного дочернего процесса.

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

Параметры

process_id Идентификатор дочернего процесса (PID), возвращённый предыдущим вызовом функции Run.
peek [необязательный] Если True, то функция не удаляет прочитанные символы из потока.
binary [необязательный] Если True, то функция читает данные как бинарные, а не текст (по умолчанию как текст).

Возвращаемое значение

Успех:Возвращает прочитанные данные. @extended содержит количество прочитанных байтов.
Ошибка:Устанавливает @error не равной 0, если достигнут конец файла (EOF), STDERR не был перенаправлен на процесс или другая ошибка.

Примечания

StderrRead читает стандартный выходной поток из консоли дочернего процесса, который обычно используется консольными приложениями для вывода данных на экран. Во время вызова функции Run создавая дочерний процесс, данные потока которого вы хотите прочитать, нужно включить параметр STD I/O, указав значение $STDERR_CHILD (4) в функции Run, чтобы она работала правильно (смотрите функцию Run()).
StderrRead не блокируется, и будет немедленно возвращать данные. Для того чтобы получить все данные, он должен быть вызван в цикле.
Обращение к потоку не удаляет данные из буфера, однако, нормально возвращает имеющиеся данные.
По умолчанию, данные возвращаются в текстовом формате. Используя параметр binary, данные возвращаются в бинарном формате.

См. также

StdoutRead, StdinWrite, StdioClose, Run, RunAs

Пример

#include <Constants.au3>

Local $iPID = Run(@ComSpec & " /c DIR Example.au3", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $sOutput
While 1
    $sOutput = StdoutRead($iPID)
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
    MsgBox(4096, "Stdout прочитано:", $sOutput)
WEnd

While 1
    $sOutput = StderrRead($iPID)
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
    MsgBox(4096, "Stderr прочитано:", $sOutput)
WEnd