Функция StdoutRead

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


StdoutRead

Читает из потока вывода STDOUT ранее запущенного дочернего процесса.

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

Параметры

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

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

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

Примечания

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

См. также

StderrRead, StdinWrite, StdioClose, Run, RunAs

Пример

#include <Array.au3>
#include <Constants.au3>

$sPath = @ScriptDir ; Каталог для поиска.
$sFileMask = '*.*' ; Маска. Поиск всех файлов в текущем каталоге. Правильный формат маски поиска смотрите в описании к функции FileFindFirstFile.
$sOut = '' ; Переменная для хранения вывода StdoutRead.

; Если указанный путь не является каталогом, то выход
If Not StringInStr(FileGetAttrib($sPath), "D") Then Exit

$sOut = StringToBinary('0' & @CRLF, 2)
$sPath = StringRegExpReplace($sPath, '\\+$', '') ; Удаляет завершающие слеши

#cs
    Параметры ком-строки для DIR:
    /B - вывод только имен.
    /A-D - поиск всех файлов, без папок.
    /S - поиск в подкаталогах.
#ce
$iPID = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $sFileMask & '" /B /S /A-D', @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

While 1
    $sOut &= StdoutRead($iPID, False, True)
    If @error Then ExitLoop
WEnd

$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)

If @error Or UBound($aOut) < 2 Then Exit

$aOut[0] = UBound($aOut) - 1
_ArrayDisplay($aOut, 'все файлы')