Una vez que una aplicación de AIR se ha iniciado como proceso nativo, puede comunicarse con los flujos de error y de entrada y salida estándar del proceso.
Los datos se leen y se escriben en los flujos utilizando las siguientes propiedades del objeto NativeProcess:
standardInput: contiene acceso a los datos del flujo de entrada estándar.
standardOutput: contiene acceso a los datos del flujo de salida estándar.
standardError: contiene acceso a los datos del flujo de error estándar.
Escritura en el flujo de entrada estándar
Los datos se pueden escribir en el flujo de entrada estándar utilizando los métodos de escritura de la propiedad standardInput del objeto NativeProcess. A medida que la aplicación de AIR escribe datos en el proceso, el objeto NativeProcess distribuye eventos standardInputProgress.
Si se produce un error al escribir en el flujo de entrada estándar, el objeto NativeProcess distribuye un evento ioErrorStandardInput.
El flujo de entrada se puede cerrar llamando al método closeInput() del objeto NativeProcess. Cuando el flujo de entrada se cierra, el objeto NativeProcess distribuye un evento standardInputClose.
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("test.exe");
nativeProcessStartupInfo.executable = file;
process = new NativeProcess();
process.start(nativeProcessStartupInfo);
process.standardInput.writeUTF("foo");
if(process.running)
{
process.closeInput();
}
Lectura en el flujo de salida estándar
Los datos se pueden leer en el flujo de salida estándar utilizando los métodos de lectura de esta propiedad. A medida que la aplicación de AIR obtiene datos del flujo de salida del proceso, el objeto NativeProcess distribuye eventos standardOutputData.
Si se produce un error al escribir en el flujo de salida estándar, el objeto NativeProcess distribuye un evento standardOutputError.
Cuando el proceso cierra el flujo de salida, el objeto NativeProcess distribuye el evento standardOutputClose.
Cuando se leen datos del flujo de entrada estándar, es muy importante leerlos a medida que se generan. Dicho de otro modo, añada un detector de eventos para el evento standardOutputData. En el detector de eventos standardOutputData, lea los datos de la propiedad standardOutput del objeto NativeProcess. No se limite a esperar a que el evento standardOutputClose o exit lea todos los datos. Si no lee los datos a medida que el proceso nativo los genera, el búfer podría llenarse y los datos podrían perderse. Un búfer lleno puede provocar que el proceso nativo se bloquee al intentar escribir más datos. Sin embargo, si no registra un detector de eventos para el evento standardOutputData, el búfer no se llenará y el proceso no se bloqueará. En ese caso, no podrá acceder a los datos.
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("test.exe");
nativeProcessStartupInfo.executable = file;
process = new NativeProcess();
process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, dataHandler);
process.start(nativeProcessStartupInfo);
var bytes:ByteArray = new ByteArray();
function dataHandler(event:ProgressEvent):void
{
bytes.writeBytes(process.standardOutput.readBytes(process.standardOutput.bytesAvailable);
}
Lectura del flujo de error estándar
Los datos se pueden leer en el flujo de error estándar utilizando los métodos de lectura de esta propiedad. A medida que la aplicación de AIR lee los datos del flujo de error del proceso, el objeto NativeProcess distribuye eventos standardErrorData.
Si se produce un error al escribir en el flujo de error estándar, el objeto NativeProcess distribuye un evento standardErrorIoError.
Cuando el proceso cierra el flujo de error, el objeto NativeProcess distribuye un evento standardErrorClose..
Cuando se leen datos del flujo de error estándar, es muy importante leerlos a medida que se generan. Dicho de otro modo, añada un detector de eventos para el evento standardErrorData. En el detector de eventos standardErrorData, lea los datos de la propiedad standardError del objeto NativeProcess. No se limite a esperar a que el evento standardErrorClose o exit lea todos los datos. Si no lee los datos a medida que el proceso nativo los genera, el búfer podría llenarse y los datos podrían perderse. Un búfer lleno puede provocar que el proceso nativo se bloquee al intentar escribir más datos. Sin embargo, si no registra un detector de eventos para el evento standardErrorData, el búfer no se llenará y el proceso no se bloqueará. En ese caso, no podrá acceder a los datos.
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("test.exe");
nativeProcessStartupInfo.executable = file;
process = new NativeProcess();
process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, errorDataHandler);
process.start(nativeProcessStartupInfo);
var errorBytes:ByteArray = new ByteArray();
function errorDataHandler(event:ProgressEvent):void
{
bytes.writeBytes(process.standardError.readBytes(process.standardError.bytesAvailable);
}