SystemWorker
システムワーカーを使うことで、4Dコードは同じマシン上で任意の外部プロセス (シェルコマンド、PHPなど ) を呼び出すことができます。 システムワーカーは非同期で呼び出されます。 コールバックを使用することで、4D は双方向の通信を可能にします。
SystemWorker
クラスは、4D
クラスストアにて提供されています。
例題
// ipconfig 情報へのアクセスを取得する Windows での例
var $myWinWorker : 4D.SystemWorker
var $ipConfig : Text
$myWinWorker:= 4D.SystemWorker.new("ipconfig")
$ipConfig:=$myWinWorker.wait(1).response //timeout 1 second
// ファイルのパーミッションを変更する macOS での例
// chmod はパーミッションを変更するための macOS コマンドです
var $myMacWorker : 4D.SystemWorker
$myMacWorker:= 4D.SystemWorker.new("chmod +x /folder/myfile.sh")
概要
4D.SystemWorker.new ( commandLine : Text { ; options : Object } ) : 4D.SystemWorker 外部プロセスを開始するために commandLine に渡したコマンドラインを実行する 4D.SystemWorker オブジェクトを作成し、返します |
.closeInput() 外部プロセスの入力ストリーム (stdin) を閉じます |
.commandLine : Textnew() 関数に引数として渡したコマンドライン |
[ |
.currentDirectory : 4D.Folder](#currentdirectory) 外部プロセスが実行される作業ディレクトリ |
.dataType : Text レスポンス本文のデータ型 |
.encoding : Text レスポンス本文のエンコーディング |
.errors : Collection 実行エラーの場合、4Dエラー (あれば) のコレクション |
.exitCode : Integer 外部プロセスから返される終了コード |
.hideWindow : Boolean 実行ファイルや DOSコンソールのウィンドウを隠すのに使用できます (Windows のみ) |
.pid : Integer 外部プロセスの、システムレベルでの一意的な識別子 |
.postMessage( message : Text) .postMessage( messageBLOB : Blob) 外部プロセスの入力ストリーム (stdin) への書き込みをおこないます |
.response : Text .response : Blob リクエストが終了した時点で、返された全データの結合 |
.responseError : Text リクエストが終了した時点で、返された全エラーの結合 |
.terminate()SystemWorker の実行を強制終了します |
.terminated : Boolean 外部プロセスが終了された場合に true |
.timeout : Integer 外部プロセスが生きている場合、キルされるまでの秒数 |
.wait( {timeout : Real} ) : 4D.SystemWorkerSystemWorker の実行終了まで、または timeout で指定した時間が経過するまで待機します |
4D.SystemWorker.new()
履歴
リリース | 内容 |
---|---|
19 R4 | 追加 |
4D.SystemWorker.new ( commandLine : Text { ; options : Object } ) : 4D.SystemWorker
引数 | 型 | 説明 | |
---|---|---|---|
commandLine | テキスト | -> | 実行するコマンドライン |
options | オブジェクト | -> | ワーカーパラメーター |
戻り値 | 4D.SystemWorker | <- | 非同期の新規システムワーカー (プロセスが開始されなかった場合は null) |
説明
4D.SystemWorker.new()
関数は、外部プロセスを開始するために commandLine に渡したコマンドラインを実行する 4D.SystemWorker
オブジェクトを作成し、返します。
返されたシステムワーカーオブジェクトは、ワーカーにメッセージを送信したり、ワーカーの結果を取得するために使用できます。
プロキシオブジェクトの生成中に問題があった場合、この関数は null
オブジェクトを返し、エラーが生成されます。
commandLine には、実行するアプリケーションのファイルのフルパス (POSIX シンタックス)、および必要に応じて追加の引数を渡します。 アプリケーション名だけを渡すと、4Dは 実行ファイルを探すために PATH
環境変数を使用します。
警告: この関数は、実行可能なアプリケーションを起動するだけで、シェル (コマンドインタープリター) の一部である命令を実行することはできません。 たとえば Windows で、このコマンドを使用して dir
命令を実行することはできません。
options オブジェクト
options に渡すオブジェクトは、次のプロパティを持つことができます:
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
onResponse | Formula | undefined | システムワーカーメ ッセージ用のコールバック。 完全なレスポンスを受け取り次第、このコールバックが呼び出されます。 コールバックは 2つのオブジェクトを引数として受け取ります (後述参照) |
onData | Formula | undefined | システムワーカーデータ用のコールバック。 システムワーカーがデータを受け取る度に、このコールバックが呼び出されます。 コールバックは 2つのオブジェクトを引数として受け取ります (後述参照) |
onDataError | Formula | undefined | 外部プロセスエラー用のコールバック (外部プロセスの stderr)。 コールバックは 2つのオブジェクトを引数として受け取ります (後述参照) |
onError | Formula | undefined | 実行エラー用のコールバック。異常なランタイム条件 (システムエラー) の場合にシステムワーカーによって返されます。 コールバックは 2つのオブジェクトを引数として受け取ります (後述参照) |
onTerminate | Formula | undefined | 外部プロセスが終了されたときのコールバック。 コールバックは 2つのオブジェクトを引数として受け取ります (後述参照) |
timeout | Number | undefined | プロセスが生きている場合、キルされるまでの秒数。 |
dataType | テキスト | "text" | レスポンス本文のデータ型。 可能な値: "text" (デフォルト), "blob"。 |
encoding | テキスト | "UTF-8" | dataType="text" の場合のみ。 レスポンス本文のエンコーディング。 利用可能な値については、CONVERT FROM TEXT コマンドの説明を参照ください。 |
variables | オブジェクト | システムワーカー用のカスタム環境変数を設定します。 シンタックス: variables.key=value (key は変数名、value はその値)。 値は、可能な限り文字列に変換されます。 値に '=' を含めることはできません。 定義されていない場合、システムワーカーは 4D環境を継承します。 | |
currentDirectory | Folder | プロセスが実行される作業ディレクトリ | |
hideWindow | ブール | true | (Windows) アプリケーションウィンドウを隠す (可能な場合)、または Windowsコンソールを隠す |
すべてのコールバック関数は、2つのオブジェクト引数を受け取ります。 その内容は、コールバックに依存します:
引数 | 型 | onResponse | onData | onDataError | onError | onTerminate |
---|---|---|---|---|---|---|
$param1 | オブジェクト | SystemWorker | SystemWorker | SystemWorker | SystemWorker | SystemWorker |
$param2.type | テキスト | "response" | "data" | "error" | "error" | "termination" |
$param2.data | Text または Blob | 取得データ | エラーデータ |
以下は、コールバック呼び出しの流れです:
onData
およびonDataError
は 1回または複数回実行されます。- 呼ばれた場合、
onError
は 1回実行されます (システムワーカーの処理を停止します)。 - エラーが発生しなかった場合、
onResponse
が 1回実行されます。 onTerminate
は常に実行されます。
wait()
を使用しない場合 (非同期呼び出し) にコールバック関数が呼び出されるためには、そのプロセスは CALL WORKER
で作成された ワーカー である必要があります (New process
は使えません)。
戻り値
この関数はシステムワーカーオブジェクトを返します。このオブジェクトに対して、SystemWorker クラスの関数やプロパティを呼び出すことができます。