パッケージ | flash.desktop |
クラス | public class NativeProcess |
継承 | NativeProcess EventDispatcher Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
NativeProcess クラスとその機能は、ネイティブインストーラー(拡張デスクトッププロファイルアプリケーション)を使用してインストールされた AIR アプリケーションでのみ使用できます。デバッグ時に、ADL に対して -profile extendedDesktop
引数を渡すことにより、NativeProcess の機能を有効にできます。実行時に、ネイティブプロセスとの通信がサポートされているかどうかを判断するには、NativeProcess.isSupported
プロパティを確認します。
AIR プロファイルのサポート:この機能は、ネイティブインストーラーを使用してデスクトップオペレーティングシステムにデプロイされたアプリケーションでサポートされます。この機能はモバイルデバイスまたは AIR for TV デバイスではサポートされません。NativeProcess.isSupported
プロパティを使用して、サポートされているかどうかを実行時にテストすることができます。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。
ネイティブインストーラー(拡張デスクトッププロファイルアプリケーション)を使用してインストールされた AIR アプリケーションでは、File.openWithDefaultApplication
を使用してアプリケーションを開くこともできます。ただし、NativeProcess クラスを使用すれば、標準入力、標準出力および標準エラーのパイプに直接アクセスできます。
注意:
extendedTV
プロファイルを使用する AIR for TV アプリケーションでは、 ネイティブ拡張を使用してネイティブプロセスを実行できます。同様に、モバイルデバイスでもネイティブ拡張を使用できます。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
isSupported : Boolean [静的] [読み取り専用]
実行中のネイティブプロセスが現在のプロファイルでサポートされているかどうかを示します。 | NativeProcess | ||
running : Boolean [読み取り専用]
このネイティブプロセスが現在実行中かどうかを示します。 | NativeProcess | ||
standardError : IDataInput [読み取り専用]
このネイティブプロセスから標準エラー出力へのアクセスを提供します。 | NativeProcess | ||
standardInput : IDataOutput [読み取り専用]
このネイティブプロセスの標準入力に対するアクセスを提供します。 | NativeProcess | ||
standardOutput : IDataInput [読み取り専用]
このネイティブプロセスの標準出力パイプに対するアクセスを提供します。 | NativeProcess |
メソッド | 定義元 | ||
---|---|---|---|
初期化されていない NativeProcess オブジェクトを作成します。 | NativeProcess | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | EventDispatcher | ||
このプロセスの入力ストリームを閉じます。 | NativeProcess | ||
イベントをイベントフローに送出します。 | EventDispatcher | ||
ネイティブプロセスの終了を試みます。 | NativeProcess | ||
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | EventDispatcher | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
EventDispatcher オブジェクトからリスナーを削除します。 | EventDispatcher | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
指定の起動情報によって特定されているネイティブプロセスを起動します。 | NativeProcess | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object | ||
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | EventDispatcher |
イベント | 概要 | 定義元 | ||
---|---|---|---|---|
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。 | EventDispatcher | |||
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。 | EventDispatcher | |||
ネイティブプロセスが存在していることを通知します。 | NativeProcess | |||
NativeProcess がエラーストリームを閉じたことを通知します。 | NativeProcess | |||
ネイティブプロセスで読み取り可能なデータが標準エラー(stderror)ストリームにあることを通知します。 | NativeProcess | |||
標準エラー(stderror)ストリームからの読み取りが失敗したことを通知します。 | NativeProcess | |||
NativeProcess オブジェクトが closeInput() メソッドを呼び出して、入力ストリームを閉じたことを通知します。 | NativeProcess | |||
標準入力(stdin)ストリームへの書き込みが失敗したことを通知します。 | NativeProcess | |||
NativeProcess が、子プロセスに対する入力ストリームにデータを書き込んだことを通知します。 | NativeProcess | |||
NativeProcess オブジェクトが出力ストリームを閉じたことを通知します。 | NativeProcess | |||
ネイティブプロセスで読み取り可能なデータが出力ストリームにあることを通知します。 | NativeProcess | |||
stdout ストリームからの読み取りが失敗したことを通知します。 | NativeProcess |
isSupported | プロパティ |
isSupported:Boolean
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
実行中のネイティブプロセスが現在のプロファイルでサポートされているかどうかを示します。extendedDesktop プロファイルで実行している場合のみ、このプロパティは true
を返します。また、AIR ファイルとしてインストールされているアプリケーションの場合、NativeProcess.isSupported
は常に false
です。NativeProcess を使用するには、ADT -target native
フラグを使用して API アプリケーションをパッケージ化する必要があります。
実装
public static function get isSupported():Boolean
running | プロパティ |
running:Boolean
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
このネイティブプロセスが現在実行中かどうかを示します。start()
メソッドを呼び出し、NativeProcess オブジェクトが exit
イベントをまだ送信していない場合、プロセスは実行中です。基礎となるオペレーティングシステム上の単一プロセスに対応する NativeProcess インスタンスです。基礎となるオペレーティングシステムプロセスが実行中の場合(ネイティブプロセスが起動中で、プロセスからオペレーティングシステムに終了コードが返されるまで)、このプロパティは true
のままです。
実装
public function get running():Boolean
standardError | プロパティ |
standardError:IDataInput
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
このネイティブプロセスから標準エラー出力へのアクセスを提供します。このパイプ上でデータが使用できるようになると、NativeProcess オブジェクトは ProgressEvent オブジェクトを送出します。使用可能なデータが存在しない場合、このストリームからデータを読み取ろうとすると、NativeProcess オブジェクトは EOFError 例外をスローします。
子プロセスの出力ストリームであっても、現在のプロセスから見れば入力データになるので、タイプは IDataInput です。
実装
public function get standardError():IDataInput
例外
EOFError — データが存在しない状態で、読み取り操作が試行された場合。
|
関連する API エレメント
standardInput | プロパティ |
standardInput:IDataOutput
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
このネイティブプロセスの標準入力に対するアクセスを提供します。このパイプを使用して、このプロセスにデータを送信します。input
プロパティにデータが書き込まれるたびに、そのデータは直ちにネイティブプロセスの入力パイプに書き込まれます。
子プロセスの入力ストリームであっても、現在のプロセスから見れば出力データになるので、タイプは IDataOutput です。
実装
public function get standardInput():IDataOutput
例外
IllegalOperationError — この値に書き込んで running プロパティが false を返した場合、または閉じている入力ストリームにデータを書き込もうとした場合。
|
関連する API エレメント
standardOutput | プロパティ |
standardOutput:IDataInput
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
このネイティブプロセスの標準出力パイプに対するアクセスを提供します。このパイプを使用して、ネイティブプロセスの標準出力からデータを読み取ります。このパイプ上にデータが存在すると、NativeProcess オブジェクトは ProgressEvent を送出します。使用可能なデータが存在しない場合、このストリームからデータを読み取ろうとすると、NativeProcess オブジェクトは EOFError をスローします。
子プロセスの出力ストリームであっても、現在のプロセスから見れば入力データになるので、タイプは IDataInput です。
実装
public function get standardOutput():IDataInput
例外
EOFError — データが存在しない状態で、読み取り操作が試行された場合。
|
関連する API エレメント
NativeProcess | () | コンストラクター |
public function NativeProcess()
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
初期化されていない NativeProcess オブジェクトを作成します。start()
メソッドを呼び出して、プロセスを開始します。
関連する API エレメント
closeInput | () | メソッド |
public function closeInput():void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
このプロセスの入力ストリームを閉じます。一部のコマンドラインアプリケーションには、入力ストリームが閉じてからいくつかの処理を開始するものがあります。一旦閉じられたストリームを再開するには、プロセスを終了してからもう一度開始する必要があります。
イベント
ioErrorStandardInput: — プロセスへの入力ストリームを閉じるのに問題があります。
| |
standardInputClose: — 入力ストリームは閉じています。
|
exit | () | メソッド |
public function exit(force:Boolean = false):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
ネイティブプロセスの終了を試みます。
パラメーター
force:Boolean (default = false ) — アプリケーションが必要に応じてネイティブプロセスを強制終了するかどうかを示します。
NativeProcess が正常に終了すると、 |
start | () | メソッド |
public function start(info:NativeProcessStartupInfo):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
指定の起動情報によって特定されているネイティブプロセスを起動します。プロセスが開始すると、すべての入出力ストリームが開きます。オペレーティングシステムに対して、指定されたプロセスの開始が要求された直後に、このメソッドが返されます。プロセスが現在実行中の場合、NativeProcess オブジェクトは IllegalOperationError
例外をスローします。NativeProcess オブジェクトの running
プロパティが true
を返す場合、プロセスは実行中です。オペレーティングシステムがプロセスを開始できない場合は、Error
がスローされます。
基礎となるオペレーティングシステム上の単一プロセスに対応する NativeProcess インスタンスです。同じオペレーティングシステムプロセスの複数のインスタンスを同時に実行する場合は、子プロセスごとに NativeProcess インスタンスを作成します。
NativeProcess オブジェクトの running
プロパティが false
を返す場合は、常にこのメソッドを呼び出すことができます。つまり、NativeProcess オブジェクトは再利用できます。言い換えれば、NativeProcess インスタンスを作成して、start()
メソッドを呼び出し、exit
イベントを待ってから、start()
を再度呼び出すことができます。後続の start()
メソッドの呼び出しでは、異なる NativeProcessStartupInfo オブジェクトを info
パラメーター値として使用します。
NativeProcess クラスとその機能は、ネイティブインストーラーを使用してインストールされた AIR アプリケーションでのみ使用できます。デバッグ時に、ADL に対して -profile extendedDesktop
引数を渡すことにより、NativeProcess の機能を有効にできます。ネイティブプロセスとの通信がサポートされているかどうかを確認するには、NativeProcess.isSupported
プロパティを調べます。
セキュリティに関する重要な考慮事項:
ネイティブプロセス API は、ユーザーのシステム上で任意の実行可能ファイルを実行できます。コマンドの構築時および実行時には、十分に注意を払ってください。実行されるコマンドが一部でも外部ソースから発行されている場合には、そのコマンドを実行しても安全であるかどうかを慎重に検証してください。同様に、AIR アプリケーションは、実行中のプロセスに渡されるデータを検証する必要があります。
ただし、入力を検証することは難しい場合があります。このような問題を回避するには、特定の API を含むネイティブアプリケーション(Windows 上の EXE ファイルなど)を作成することが最適です。これらの API は、AIR アプリケーションによって明示的に要求される場合にのみこれらのコマンドを処理します。例えば、ネイティブアプリケーションは、標準入力ストリームを通じて、限定された命令セットのみを受け付ける場合があります。
Windows 上の AIR は、ユーザーが .bat ファイルを直接実行することを許可しません。Windows .bat ファイルは、コマンドインタープリターアプリケーション(cmd.exe)によって実行されます。.bat ファイルを呼び出すとき、このコマンドアプリケーションは、コマンドに渡される引数を、起動する追加のアプリケーションとして解釈することができます。引数のストリングに悪質な意図で不要な文字が挿入されている場合、有害または安全ではないアプリケーションを cmd.exe が実行するおそれがあります。例えば、妥当なデータ検証が行われない場合、AIR アプリケーションが myBat.bat myArguments c:/evil.exe
を呼び出す可能性があります。このコマンドアプリケーションは、バッチファイルを実行するときに、一緒に evil.exe アプリケーションを起動することになります。
.bat ファイルで start()
メソッドを呼び出すと、NativeProcess オブジェクトは例外をスローします。Error オブジェクトの message
プロパティには、ストリング「Error #3219: The NativeProcess could not be started」が含まれます。
パラメーター
info:NativeProcessStartupInfo — NativeProcessStartupInfo では、ネイティブプロセスの起動方法を定義します。
|
例外
IllegalOperationError — NativeProcess が現在実行中の場合。
| |
ArgumentError — NativeProcessStartupInfo の nativePath プロパティが存在しない場合。
| |
Error — NativeProcess が正常に起動しなかった場合。
|
関連する API エレメント
exit | イベント |
flash.events.NativeProcessExitEvent
プロパティ NativeProcessExitEvent.type =
flash.events.NativeProcessExitEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
ネイティブプロセスが存在していることを通知します。exitCode
プロパティには、プロセスの終了時にプロセスからホストオペレーティングシステムに返される値が含まれています。AIR アプリケーションが NativeProcess オブジェクトの exit()
メソッドを呼び出してプロセスを終了すると、exitCode
プロパティは NaN に設定されます。
standardErrorClose | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
NativeProcess がエラーストリームを閉じたことを通知します。
standardErrorData | イベント |
flash.events.ProgressEvent
プロパティ ProgressEvent.type =
flash.events.ProgressEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
ネイティブプロセスで読み取り可能なデータが標準エラー(stderror)ストリームにあることを通知します。NativeProcess オブジェクトは、子プロセスが標準エラーストリームをフラッシュしたとき、またはプロセス間通信で使用している内部バッファーが一杯になったときに、このイベントを送出します。この内部バッファーのサイズに依存するようなコードは書かないようにしてください。内部バッファーのサイズはオペレーティングシステムによって異なります。
standardErrorIoError | イベント |
flash.events.IOErrorEvent
プロパティ IOErrorEvent.type =
flash.events.IOErrorEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
標準エラー(stderror)ストリームからの読み取りが失敗したことを通知します。NativeProcess オブジェクトは、ランタイムがネイティブプロセスの標準エラーパイプからデータを読み取れない場合に、このイベントを送出することがあります。
standardInputClose | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
NativeProcess オブジェクトが closeInput()
メソッドを呼び出して、入力ストリームを閉じたことを通知します。実際のネイティブプロセスによって入力ストリームが閉じられた場合には、NativeProcess オブジェクトはこのイベントを送出しません。
standardInputIoError | イベント |
flash.events.IOErrorEvent
プロパティ IOErrorEvent.type =
flash.events.IOErrorEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
標準入力(stdin)ストリームへの書き込みが失敗したことを通知します。NativeProcess オブジェクトは、closeInput()
メソッドが失敗したとき、またはランタイムがネイティブプロセスの標準入力パイプにデータを書き込めない場合に、このイベントを送出します。
standardInputProgress | イベント |
flash.events.ProgressEvent
プロパティ ProgressEvent.type =
flash.events.ProgressEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
NativeProcess が、子プロセスに対する入力ストリームにデータを書き込んだことを通知します。NativeProcess オブジェクトは、データがストリームに書き込まれたときに、このイベントを送出します。このイベントは、子プロセスにデータが読み取られたかどうかを示すものではありません。
standardOutputClose | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
NativeProcess オブジェクトが出力ストリームを閉じたことを通知します。
standardOutputData | イベント |
flash.events.ProgressEvent
プロパティ ProgressEvent.type =
flash.events.ProgressEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
ネイティブプロセスで読み取り可能なデータが出力ストリームにあることを通知します。NativeProcess オブジェクトは、子プロセスが stdout ストリームをフラッシュしたとき、またはプロセス間通信で使用している内部バッファーが一杯になったときに、このイベントを送出します。この内部バッファーのサイズに依存するようなコードは書かないようにしてください。内部バッファーのサイズはオペレーティングシステムによって異なります。
standardOutputIoError | イベント |
flash.events.IOErrorEvent
プロパティ IOErrorEvent.type =
flash.events.IOErrorEvent
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
stdout ストリームからの読み取りが失敗したことを通知します。NativeProcess オブジェクトは、ランタイムがネイティブプロセスの標準出力パイプからデータを読み取れない場合に、このイベントを送出することがあります。
package { import flash.display.Sprite; import flash.desktop.NativeProcess; import flash.desktop.NativeProcessStartupInfo; import flash.events.Event; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; import flash.events.NativeProcessExitEvent; import flash.filesystem.File; public class NativeProcessExample extends Sprite { public var process:NativeProcess; public function NativeProcessExample() { if(NativeProcess.isSupported) { setupAndLaunch(); } else { trace("NativeProcess not supported."); } } public function setupAndLaunch():void { var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); var file:File = File.applicationDirectory.resolvePath("test.py"); nativeProcessStartupInfo.executable = file; var processArgs:Vector.<String> = new Vector.<String>(); processArgs[0] = "foo"; nativeProcessStartupInfo.arguments = processArgs; process = new NativeProcess(); process.start(nativeProcessStartupInfo); process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); process.addEventListener(NativeProcessExitEvent.EXIT, onExit); process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); } public function onOutputData(event:ProgressEvent):void { trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); } public function onErrorData(event:ProgressEvent):void { trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); } public function onExit(event:NativeProcessExitEvent):void { trace("Process exited with ", event.exitCode); } public function onIOError(event:IOErrorEvent):void { trace(event.toString()); } } }
#!/usr/bin/python
# ------------------------------------------------------------------------------
# Sample Python script
# ------------------------------------------------------------------------------
import sys
for word in sys.argv: #echo the command line arguments
print word
print "HI FROM PYTHON"
print "Enter user name"
line = sys.stdin.readline()
sys.stdout.write("hello," + line)
Tue Jun 12 2018, 10:34 AM Z