Nachdem eine AIR-Anwendung einen nativen Prozess gestartet hat, ist die Kommunikation mit dem Standardeingabestream, dem Standardausgabestream und dem Standardfehlerstream des Prozesses möglich.
Daten werden mit den folgenden Eigenschaften des NativeProcess-Objekts aus den Streams gelesen und in die Streams geschrieben:
-
standardInput
– Ermöglicht den Zugriff auf die Daten des Standardeingabestreams.
-
standardOutput
– Ermöglicht den Zugriff auf die Daten des Standardausgabestreams.
-
standardError
– Ermöglicht den Zugriff auf die Daten des Standardfehlerstreams.
Schreiben in den Standardeingabestream
Zum Schreiben von Daten in den Standardeingabestream können Sie die write-Methoden der
standardInput
-Eigenschaft des NativeProcess-Objekts verwenden. Während die AIR-Anwendung Daten in den Prozess schreibt, setzt das NativeProcess-Objekt
standardInputProgress
-Ereignisse ab.
Wenn beim Schreiben in den Standardeingabestream ein Fehler auftritt, setzt das NativeProcess-Objekt ein
ioErrorStandardInput
-Ereignis ab.
Sie können den Eingabestream schließen, indem Sie die
closeInput()
-Methode des NativeProcess-Objekts aufrufen. Wenn der Eingabestream geschlossen wird, setzt das NativeProcess-Objekt ein
standardInputClose
-Ereignis ab.
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();
}
Lesen aus dem Standardausgabestream
Zum Lesen von Daten aus dem Standardausgabestream verwenden Sie die read-Methoden dieser Eigenschaft. Während die AIR-Anwendung Ausgabestreamdaten vom Prozess erhält, setzt das NativeProcess-Objekt
standardOutputData
-Ereignisse ab.
Wenn beim Schreiben in den Standardausgabestream ein Fehler auftritt, setzt das NativeProcess-Objekt ein
standardOutputError
-Ereignis ab.
Wenn der Prozess den Ausgabestream schließt, setzt das NativeProcess-Objekt ein
standardOutputClose
-Ereignis ab.
Achten Sie beim Lesen von Daten aus dem Standardeingabestream darauf, die Daten direkt bei der Erstellung zu lesen. Fügen Sie also einen Ereignis-Listener für das
standardOutputData
-Ereignis hinzu. Im
standardOutputData
-Ereignis-Listener lesen Sie die Daten aus der
standardOutput
-Eigenschaft des NativeProcess-Objekts. Warten Sie nicht darauf, dass die Ereignisse
standardOutputClose
oder
exit
alle Daten lesen. Wenn Sie die Daten nicht direkt beim Erstellen durch den nativen Prozess lesen, kann der Puffer zu voll werden oder Daten können verloren gehen. Wenn der Puffer voll ist, kann dies dazu führen, dass der native Prozess beim Versuch, weitere Daten zu schreiben, angehalten wird. Wenn Sie jedoch keinen Ereignis-Listener für das
standardOutputData
-Ereignis registrieren, wird der Puffer nicht voll und der Prozess wird nicht angehalten. In diesem Fall haben Sie keinen Zugriff auf die Daten.
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);
}
Lesen aus dem Standardfehlerstream
Zum Lesen von Daten aus dem Standardfehlerstream verwenden Sie die read-Methoden dieser Eigenschaft. Während die AIR-Anwendung Fehlerstreamdaten aus dem Prozess liest, setzt das NativeProcess-Objekt
standardErrorData
-Ereignisse ab.
Wenn beim Schreiben in den Standardfehlerstream ein Fehler auftritt, setzt das NativeProcess-Objekt ein
standardErrorIoError
-Ereignis ab.
Wenn der Prozess den Fehlerstream schließt, setzt das NativeProcess-Objekt ein
standardErrorClose
-Ereignis ab..
Achten Sie beim Lesen von Daten aus dem Standardfehlerstream darauf, die Daten direkt bei der Erstellung zu lesen. Fügen Sie also einen Ereignis-Listener für das
standardErrorData
-Ereignis hinzu. Im
standardErrorData
-Ereignis-Listener lesen Sie Daten aus der
standardError
-Eigenschaft des NativeProcess-Objekts. Warten Sie nicht darauf, dass die Ereignisse
standardErrorClose
oder
exit
alle Daten lesen. Wenn Sie die Daten nicht direkt beim Erstellen durch den nativen Prozess lesen, kann der Puffer zu voll werden oder Daten können verloren gehen. Wenn der Puffer voll ist, kann dies dazu führen, dass der native Prozess beim Versuch, weitere Daten zu schreiben, angehalten wird. Wenn Sie jedoch keinen Ereignis-Listener für das
standardErrorData
-Ereignis registrieren, wird der Puffer nicht voll und der Prozess wird nicht angehalten. In diesem Fall haben Sie keinen Zugriff auf die Daten.
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);
}