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
----------------------------------------
|