När ett AIR-program har startat en intern process kan det kommunicera med processens strömmar av standardindata, standardutdata och standardfel.
Du skriver data till och läser data från strömmarna med hjälp av följande egenskaper i objektet NativeProcess:
-
standardInput
– Innehåller åtkomst till data för standardindataströmmen.
-
standardOutput
– Innehåller åtkomst till data för standardutdataströmmen.
-
standardError
– Innehåller åtkomst till data för standardfelströmmen.
Skriva till standardindataströmmen
Du kan skriva data till standardindataströmmen med hjälp av skrivmetoder för egenskapen
standardInput
för objektet NativeProcess. När AIR-programmet skriver data till processen skickar objektet NativeProcess
standardInputProgress
-händelser.
Om ett fel inträffar när data skrivs till standardindataströmmen skickar objektet NativeProcess en
ioErrorStandardInput
-händelse.
Du kan stänga indataströmmen genom att anropa metoden
closeInput()
i objektet NativeProcess. När indataströmmen stängs skickar objektet NativeProcess en
standardInputClose
-händelse.
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();
}
Läsa från standardutdataströmmen
Du kan läsa data från standardutdataströmmen med hjälp av den här egenskapens läsmetoder. När AIR-programmet tar emot data från processens utdataström skickar objektet NativeProcess
standardOutputData
-händelser.
Om ett fel inträffar när data skrivs till standardutdataströmmen skickar objektet NativeProcess en
standardOutputError
-händelse.
När processen avslutar utdataströmmen skickar objektet NativeProcess en
standardOutputClose
-händelse.
Se till att data läses samtidigt som de genereras när de läses från standardindataströmmen. Lägg med andra ord till en händelseavlyssnare för händelsen
standardOutputData
. Läs data i händelseavlyssnaren
standardOutputData
från egenskapen
standardOutput
för objektet NativeProcess. Vänta inte bara på att händelsen
standardOutputClose
eller
exit
ska läsa alla data. Om du inte läser data samtidigt som de genereras av den interna processen kan bufferten bli full och data kan förloras. En full buffert kan göra så att den interna processen hänger sig när mer data ska skrivas. Men om du inte registrerar en händelseavlyssnare för händelsen
standardOutputData
kommer bufferten inte att bli full och processen kommer inte att hänga sig. I det här fallet har du ingen åtkomst till dessa data.
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);
}
Läsa från standardfelströmmen
Du kan läsa data från standardfelströmmen med hjälp av den här egenskapens läsmetoder. När AIR-programmet läser felströmsdata från processen skickar objektet NativeProcess
standardErrorData
-händelser.
Om ett fel inträffar när data skrivs till standardfelströmmen skickar objektet NativeProcess en
standardErrorIoError
-händelse.
När processen stänger felströmmen skickar objektet NativeProcess en
standardErrorClose
-händelse..
Se till att data läses samtidigt som de genereras när de läses från standardfelströmmen. Lägg med andra ord till en händelseavlyssnare för händelsen
standardErrorData
. Läs data i händelseavlyssnaren
standardErrorData
från egenskapen
standardError
för objektet NativeProcess. Vänta inte bara på att händelsen
standardErrorClose
eller
exit
ska läsa alla data. Om du inte läser data samtidigt som de genereras av den interna processen kan bufferten bli full och data kan förloras. En full buffert kan göra så att den interna processen hänger sig när mer data ska skrivas. Men om du inte registrerar en händelseavlyssnare för händelsen
standardErrorData
kommer bufferten inte att bli full och processen kommer inte att hänga sig. I det här fallet har du ingen åtkomst till dessa data.
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);
}