Функция StdinWrite

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


StdinWrite

Записывает символы во входной поток STDIN ранее запущенного дочернего процесса.

StdinWrite ( process_id [, data ] )

Параметры

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

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

Успех:Возвращает количество переданных символов.
Ошибка:Устанавливает @error не равной 0, если STDIN не был перенаправлен на процесс или другая ошибка.

Примечания

StdinWrite записывает в стандартный входной поток консоли дочернего процесса, который обычно используется консольными приложениями для чтения данных ввода от пользователя, то есть с клавиатуры. Во время вызова функции Run создавая дочерний процесс, в поток которого вы хотите записать, нужно включить параметр STD I/O, указав значение $STDIN_CHILD (1) в функции Run, чтобы она работала правильно (смотрите функцию Run()).

Второй необязательный параметр является строкой, которую вы хотите записать в поток StdinWrite. Если функция вызывается без второго параметра, то StdinWrite закрывает поток, предотвращая от дальнейшей записи.

Поток - буфер FIFO "первым пришёл - первым вышел" (first-in first-out) с произвольно ограниченным размером; если в любое время, при вызове функции (если это не является вызовом для закрытия потока) не вмещается более символов для записи в поток, то функция StdinWrite блокируется (пауза) и не разблокируется пока дочерний процесс не закроет поток или прочитает достаточно символов из потока, чтобы разрешить завершиться процедуре записи. Это означает, что процесс AutoIt будет остановлен, и не будет никакой обработки горячих клавиш, сообщений GUI, и т.д. пока дочерний процесс читает из потока STDIN.

Символы преобразовываются в ANSI перед записью.

Бинарные данные записываются как есть, и не будут преобразовываться в текстовую строку. Чтобы вывести шестнадцатеричное представление бинарных данных используйте функцию String(), чтобы явно привести данные в текстовую строку.

См. также

StdoutRead, StderrRead, StdioClose, Run, RunAs

Пример

#include <Constants.au3>

Local $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

; Записывает строку для сортировки в дочерний sort.exe's Stdin.
StdinWrite($iPID, "Банан" & @CRLF & "Слон" & @CRLF & "Яблоко" & @CRLF & "Олень" & @CRLF & "Автомобиль" & @CRLF)

; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)

Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Сортированная строка: " & @CRLF & $sOutput)