函数参考


StderrRead

从以前运行的子进程读取 STDERR 流.

StderrRead ( 进程ID[, 只读取 = false[, 二进制 = false]] )

参数

进程ID 子进程进程ID(PID), 由前面调用run函数返回.
只读取 [可选参数] 如果值为 true ,函数将不会移除从流中读取的字符.
二进制 [可选参数] 如果值为 true ,函数将由读取二进制代替读取文本 (默认为文本).

返回值

成功: 返回读取的数据. @extended 包含读取的字节数.
失败: 如果出现EOF字符将设置 @error 为非0(数据已经结束), STDERR 不会重定向进程或者其它错误.

注意/说明

StderrRead 从子进程的控制台标准输出流读取数据, 通常用于控制台应用程序输出数据到屏幕. 为了保证函数的正常工作,当你想从 STD I/O 读取时,你需要在调用时包括 $STDERR_CHILD (4) 值 (参考 Run 函数).
由于 StderrRead 无法屏蔽,它会立即返回数据. 因此如果要连续得到所有数据,你必须在一个循环内调用它.
由于默认不会移除流的数据缓冲区, 因此它通常能正确返回数据.
默认情况下,返回的数据为文本格式. 可以使用二进制选项,就能让数据将按二进制格式返回.

相关

StdoutRead, StdinWrite, StdioClose, Run, RunAs

示例/演示


; Demonstrates StdoutRead()
#include <Constants.au3>

Local $foo = Run(@ComSpec & " /c dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
WEnd

While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDERR read:", $line)
WEnd

MsgBox(0, "Debug", "Exiting...")