AIR アプリケーションでは、ネイティブプロセスを起動したら、プロセスの標準入力ストリーム、標準出力ストリーム、および標準エラーストリームと通信できます。
ストリームのデータの読み取りおよび書き込みは、NativeProcess オブジェクトの次のプロパティを使用して行います。
standardInput — 標準入力ストリームデータへのアクセスを含みます。
standardOutput — 標準出力ストリームデータへのアクセスを含みます。
standardError — 標準エラーストリームデータへのアクセスを含みます。
標準入力ストリームへの書き込み
標準入力ストリームにデータを書き込むには、NativeProcess オブジェクトの standardInput プロパティの書き込みメソッドを使用します。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();
}
標準出力ストリームからの読み取り
標準出力ストリームからデータを読み取るには、このプロパティの読み取りメソッドを使用します。AIR アプリケーションがプロセスから出力ストリームデータを受信すると、NativeProcess オブジェクトは standardOutputData イベントを送出します。
標準出力ストリームへの書き込みでエラーが発生すると、NativeProcess オブジェクトは standardOutputError イベントを送出します。
出力ストリームが終了するとき、NativeProcess オブジェクトは standardOutputClose イベントを送出します。
標準データストリームからデータを読み取るときは、生成時にデータを読み取ってください。言い換えると、standardOutputData イベントのイベントリスナーを追加します。standardOutputData イベントリスナーで、NativeProcess オブジェクトの standard utput プロパティからデータを読み取ります。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);
}
標準エラーストリームからの読み取り
標準エラーストリームからデータを読み取るには、このプロパティの読み取りメソッドを使用します。AIR アプリケーションがプロセスからエラーストリームデータを読み取ると、NativeProcess オブジェクトは standardErrorData イベントを送出します。
標準エラーストリームへの書き込みでエラーが発生すると、NativeProcess オブジェクトは standardErrorIoError イベントを送出します。
エラーストリームが終了するとき、NativeProcess オブジェクトは standardErrorClose イベントを送出します。
標準エラーストリームからデータを読み取るときは、生成時にデータを読み取ります。言い換えると、standardErrorData イベントのイベントリスナーを追加します。standardErrorData イベントリスナーで、NativeProcess オブジェクトの standardError プロパティからデータを読み取ります。standardErrorClose イベントまたは 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_ERROR_DATA, errorDataHandler);
process.start(nativeProcessStartupInfo);
var errorBytes:ByteArray = new ByteArray();
function errorDataHandler(event:ProgressEvent):void
{
bytes.writeBytes(process.standardError.readBytes(process.standardError.bytesAvailable);
}