AIR 應用程式啟動原生程序之後,就可以與程序的標準輸入、標準輸出以及標準錯誤串流通訊。
您可以使用 NativeProcess 物件的下列屬性,從串流讀取資料以及將資料寫入串流:
-
standardInput
— 包含標準輸入串流資料的存取權。
-
standardOutput
— 包含標準輸出串流資料的存取權。
-
standardError
— 包含標準錯誤串流資料的存取權。
寫入標準輸入串流
您可以使用 NativeProcess 物件之
standardInput
屬性的 write 方法,將資料寫入標準輸入串流。當 AIR 應用程式將資料寫入程序時,NativeProcess 物件會傳送
standardInputProgress
事件。
如果在寫入標準輸入串流時發生錯誤,NativeProcess 物件會傳送
ioErrorStandardInput
事件。
呼叫 NativeProcess 物件的
closeInput()
方法,就可以關閉輸入串流。當輸入串流關閉後,NativeProcess 物件會傳送一個
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();
}
從標準輸出串流讀取
使用這個屬性的 read 方法,就可以從標準輸出串流讀取資料。 當 AIR 應用程式從程序取得輸出串流資料後,NativeProcess 物件會傳送
standardOutputData
事件。
若寫入標準輸出串流時發生錯誤,NativeProcess 物件會傳送一個
standardOutputError
事件。
程序關閉輸出串流之後,NativeProcess 物件會傳送一個
standardOutputClose
事件。
讀取標準輸入串流中的資料時,請確認在資料產生時就進行讀取。換言之,即新增
standardOutputData
事件的事件偵聽程式。在
standardOutputData
事件偵聽程式中,讀取 NativeProcess 物件之
standardOutput
屬性的資料。而不要只是等待
standardOutputClose
事件或
exit
事件,才讀取所有資料。如果您未在原生程序產生資料時讀取資料,則緩衝區可能會填滿,資料可能會因而遺失。緩衝區填滿後,如果嘗試寫入更多資料,會導致原生程序變得遲緩。不過,如果您未註冊
standardOutputData
事件的事件偵聽程式,則緩衝區不會填滿,程序也不會變得遲緩。在此情況下,您無法存取資料。
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);
}
從標準錯誤串流讀取
使用這個屬性的 read 方法,就可以從標準錯誤串流讀取資料。 當 AIR 應用程式從程序讀取錯誤串流資料後,NativeProcess 物件會傳送
standardErrorData
事件。
若寫入標準錯誤串流時發生錯誤,NativeProcess 物件會傳送一個
standardErrorIoError
事件。
程序關閉錯誤串流後,NativeProcess 物件會傳送
standardErrorClose
事件。
讀取標準錯誤串流中的資料時,請確認在資料產生時就進行讀取。換言之,即新增
standardErrorData
事件的事件偵聽程式。在
standardErrorData
事件偵聽程式中,讀取 NativeProcess 物件之
standardError
屬性的資料。而不要只是等待
standardErrorClose
事件或
exit
事件,才讀取所有資料。如果您未在原生程序產生資料時讀取資料,則緩衝區可能會填滿,資料可能會因而遺失。緩衝區填滿後,如果嘗試寫入更多資料,會導致原生程序變得遲緩。不過,如果您未註冊
standardErrorData
事件的事件偵聽程式,則緩衝區不會填滿,程序也不會變得遲緩。在此情況下,您無法存取資料。
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);
}