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);
}