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()).См. также
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, 'все файлы')