Function Reference

首页  后退  前进

StdinWrite

 

写入字符到运行的子进程 STDIN 流.

 

StdinWrite ( process_id [, data] )

参数

process_id

子进程 ID, 由先前调用的 Run 返回.

data

[可选] 要输出的数据. 可以是文本或二进制数据.

返回值

成功:

返回写入的字符数.

失败:

设置 @error 为非 0 值, STDIN 不再为进程或其它错误重定向.

备注

StdinWrite 为子进程写入到控制台标准输入流, 通常使用控制台应用程序读取用户的键盘输入.

对子进程调用 Run() 期间, 要写入标准 I/O 值, 参数必须包括 $STDIN_CHILD (1), 函数才能正常工作 (见 Run 函数).

 

第二参数是可选参数, 即希望 StdinWrite 写入到流的字符串.

如果函数调用时没有第二个参数, StdinWrite 将关闭流并使后续写入无效.

 

stream 是一个先进先出的任意有限尺寸的缓冲器;

当本函数被调用时(除非是调用关闭流), 如果没有更多字符写入流, 该函数将阻止(暂停),

而不是返回, 直到子进程关闭流, 或者读取足够字符以允许写程序完成.

这意味着 AutoIt 进程将停止, 将不会有任何热键处理, GUI 消息, 等等. 直到子进程从 STDIN 流读取为止.

 

字符在写入之前转换为 ANSI 码.

 

二进制数据原样写入, 不会转换为字符串. 打印十六进制表示的二进制数据, 请使用 String() 函数明确转换数据为字符串.

相关

Run, RunAs, StderrRead, StdioClose, StdoutRead

函数示例

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>
Example()
Func Example()
    Local $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
    ; Write a string of items to be sorted to child sort.exe's Stdin.
    StdinWrite($iPID, "Banana" & @CRLF & "Elephant" & @CRLF & "Apple" & @CRLF & "Deer" & @CRLF & "Car" & @CRLF)
    ; Calling StdinWrite without a second parameter closes the stream.
    StdinWrite($iPID)
    Local $sOutput = "" ; Store the output of StdoutRead to a variable.
    While 1
        $sOutput &= StdoutRead($iPID) ; Read the Stdout stream of the PID returned by Run.
        If @error Then ; Exit the loop if the process closes or StdoutRead returns an error.
            ExitLoop
        EndIf
    WEnd
    MsgBox($MB_SYSTEMMODAL, "", "The sorted string is: " & @CRLF & $sOutput)
EndFunc   ;==>Example

----------------------------------------