一旦 AIR 应用程序启动本机进程后,它就可以与该进程的标准输入、标准输出和标准错误流通信。
使用 NativeProcess 对象的下列属性流读取数据以及将数据写入流:
-
standardInput
— 包含访问标准输入流数据的权限。
-
standardOutput
— 包含对标准输出流数据的访问。
-
standardError
— 包含访问标准错误流数据的权限。
写入标准输入流
您可以使用 NativeProcess 对象的
standardInput
属性的写入方法将数据写入标准输入流。AIR 应用程序将数据写入进程时,NativeProcess 对象会调度多个
standardInputProgress
事件。
如果写入标准输入流时出错,NativeProcess 对象会调度
ioErrorStandardInput
事件。
可以通过调用 NativeProcess 对象的
closeInput()
方法关闭输入流。关闭输入流后,NativeProcess 对象会调度一个
standardInputClose
事件。
var nativeProcessStartupInfo = new NativeProcessStartupInfo();
var file = air.File.applicationDirectory.resolvePath("test.exe");
nativeProcessStartupInfo.executable = file;
process = new air.NativeProcess();
process.start(nativeProcessStartupInfo);
process.standardInput.writeUTF("foo");
if(process.running)
{
process.closeInput();
}
从标准输出流中读取
可使用此属性的读取方法从标准输出流中读取数据。AIR 应用程序从进程获取输出流数据时,NativeProcess 对象会调度多个
standardOutputData
事件。
如果写入标准输出流时出错,NativeProcess 对象会调度一个
standardOutputError
事件。
当进程关闭输出流时,NativeProcess 对象会调度
standardOutputClose
事件。
从标准输入流读取数据时,请确保在生成数据时读取数据。换句话说,为
standardOutputData
事件添加事件侦听器。在
standardOutputData
事件侦听器中,从 NativeProcess 对象的
standardOutput
属性读取数据。不要只等待
standardOutputClose
事件或
exit
事件读取所有数据。如果在本机进程生成数据时不读取数据,可能导致缓冲区填满或数据丢失。缓冲区填满可能会导致本机进程在尝试写入更多数据时终止。但是,如果您不为
standardOutputData
事件注册事件侦听器,则不会填充缓冲区,也不会终止进程。在这种情况下,您将无权访问数据。
var nativeProcessStartupInfo = new NativeProcessStartupInfo();
var file = air.File.applicationDirectory.resolvePath("test.exe");
nativeProcessStartupInfo.executable = file;
process = new air.NativeProcess();
process.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, dataHandler);
process.start(nativeProcessStartupInfo);
var bytes = new air.ByteArray();
function dataHandler(event)
{
bytes.writeBytes(process.standardOutput.readBytes(process.standardOutput.bytesAvailable);
}
从标准错误流中读取
可使用此属性的读取方法从标准错误流中读取数据。AIR 应用程序从进程中读取错误流数据时,NativeProcess 对象会调度多个
standardErrorData
事件。
如果写入标准错误流时出错,NativeProcess 对象会调度一个
standardErrorIoError
事件。
当进程关闭错误流时,NativeProcess 对象会调度
standardErrorClose
事件。
从标准错误流中读取数据时,请确保在生成数据时读取数据。换句话说,为
standardErrorData
事件添加事件侦听器。在
standardErrorData
事件侦听器中,从 NativeProcess 对象的
standardError
属性中读取数据。不要只等待
standardErrorClose
事件或
exit
事件读取所有数据。如果在本机进程生成数据时不读取数据,可能导致缓冲区填满或数据丢失。缓冲区填满可能会导致本机进程在尝试写入更多数据时终止。但是,如果您不为
standardErrorData
事件注册事件侦听器,则不会填充缓冲区,也不会终止进程。在这种情况下,您将无权访问数据。
var nativeProcessStartupInfo = new NativeProcessStartupInfo();
var file = air.File.applicationDirectory.resolvePath("test.exe");
nativeProcessStartupInfo.executable = file;
process = new air.NativeProcess();
process.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, errorDataHandler);
process.start(nativeProcessStartupInfo);
var errorBytes = new air.ByteArray();
function errorDataHandler(event)
{
errorBytes.writeBytes(process.standardError.readBytes(process.standardError.bytesAvailable);
}