Gdy aplikacja AIR uruchomi już proces rodzimy, może komunikować się ze standardowymi strumieniami procesu: wejściowym, wyjściowym i błędów.
Do zapisywania i odczytywania danych ze strumieni służą następujące właściwości obiektu NativeProcess:
-
standardInput
— umożliwia dostęp do standardowego strumienia wejściowego.
-
standardOutput
— umożliwia dostęp do standardowego strumienia wyjściowego.
-
standardError
— umożliwia dostęp do standardowego strumienia błędów.
Zapis do standardowego strumienia wejściowego
Istnieje możliwość zapisywania danych do standardowego strumienia wejściowego przy użyciu metod udostępnianych przez właściwość
standardInput
obiektu NativeProcess. Gdy aplikacja AIR zapisuje dane do strumienia procesu, obiekt NativeProcess wywołuje zdarzenia
standardInputProgress
.
Jeśli podczas zapisywania do standardowego strumienia wejściowego wystąpi błąd, obiekt NativeProcess wywoła zdarzenie
ioErrorStandardInput
.
Strumień wejściowy można zamknąć, wywołując metodę
closeInput()
obiektu NativeProcess. Gdy strumień wejściowy jest zamykany, obiekt NativeProcess wywołuje zdarzenie
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();
}
Odczytywanie ze standardowego strumienia wyjściowego
Możliwe jest odczytywanie danych ze standardowego strumienia wyjściowego przy użyciu metod omawianej właściwości. W miarę, jak aplikacja AIR odbiera dane ze strumienia wyjściowego procesu, obiekt NativeProcess wywołuje zdarzenia
standardOutputData
.
Jeśli podczas zapisywania do standardowego strumienia wyjściowego wystąpi błąd, obiekt NativeProcess wywoła zdarzenie
standardOutputError
.
Gdy proces zamknie strumień wyjściowy, obiekt NativeProcess wywołuje zdarzenie
standardOutputClose
.
Podczas odczytu danych ze standardowego strumienia wejściowego należy pamiętać, by odczytywać dane w miarę, jak będą generowane. Innymi słowy, należy dodać detektor zdarzeń do zdarzenia
standardOutputData.
W detektorze zdarzeń
standardOutputData
należy odczytać dane z właściwości
standardOutput
obiektu NativeProcess. Nie wystarczy tylko czekać, aż zdarzenie
standardOutputClose
lub
exit
odczyta wszystkie dane. Jeżeli dane nie będą odczytywane równolegle z ich generowaniem przez proces rodzimy, może dojść do przepełnienia buforu i utraty danych. Pełny bufor może opóźnić działanie procesu rodzimego podczas próby zapisu większej ilości danych. Jednak jeżeli detektor zdarzeń nie zostanie zarejestrowany dla zdarzenia
standardOutputData
, wówczas bufor nie będzie się zapełniać, a proces będzie działać bez opóźnień. W takim przypadku nie będzie można uzyskać dostępu do danych.
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);
}
Odczytywanie ze standardowego strumienia błędów
Możliwe jest odczytywanie danych ze standardowego strumienia błędów przy użyciu metod omawianej właściwości. W miarę, jak aplikacja AIR odbiera dane ze strumienia błędów procesu, obiekt NativeProcess wywołuje zdarzenia
standardErrorData
.
Jeśli podczas zapisywania do standardowego strumienia błędów wystąpi błąd, obiekt NativeProcess wywoła zdarzenie
standardErrorIoError
.
Gdy proces zamknie strumień błędów, obiekt NativeProcess wywołuje zdarzenie
standardErrorClose
..
Podczas odczytu danych ze standardowego strumienia błędów należy pamiętać, by odczytywać dane w miarę, jak będą generowane. Innymi słowy, należy dodać detektor zdarzeń do zdarzenia
standardErrorData
. W detektorze zdarzeń
standardErrorData
należy odczytać dane z właściwości
standardError
obiektu NativeProcess. Nie wystarczy tylko czekać, aż zdarzenie
standardErrorClose
lub
exit
odczyta wszystkie dane. Jeżeli dane nie będą odczytywane równolegle z ich generowaniem przez proces rodzimy, może dojść do przepełnienia buforu i utraty danych. Pełny bufor może opóźnić działanie procesu rodzimego podczas próby zapisu większej ilości danych. Jednak jeżeli detektor zdarzeń nie zostanie zarejestrowany dla zdarzenia
standardErrorData
, wówczas bufor nie będzie się zapełniać, a proces będzie działać bez opóźnień. W takim przypadku dostęp do danych będzie niemożliwy.
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);
}