Exec
3.2.9 Exec
説明
Exec - OS のコマンドをローカルシステム(T-Plan Robot が動作するマシン)で実行します。引数は、Unix/Linux の 'ls -l' のような単一のコマンドでなければなりません。JavaとOSの間のインターフェイスの制限により、パイプや出力のリダイレクトはできません。出力をファイルに保存する必要がある場合は、outfileパラメータを使用する。パイプやリダイレクトを使用する必要がある場合は、コマンドをシェルスクリプトやバッチファイルに記述し、代わりに Exec コマンドがそれを呼び出すようにしてください。
コマンドラインインタープリタが提供するWindowsコマンドを実行する必要がある場合は、Execコマンドでインタープリタを指定する必要があります。これは、dir、cd、copy、md、mkdir、rd、rmdir、del、erase などのコマンドに当てはまります。コマンドの完全なリストはWindowsシステムによって異なり、Microsoftのサイトで入手できます。また、WikipediaのCOMMAND.COMのページも参考になる。Windowsで「dir」を実行する例は次のようになります:
Exec "cmd.exe /C dir"
基礎となるオペレーティング・システムを呼び出すにはそれぞれ多少のオーバーヘッドが必要なので、一連のOSコマンドを一度に実行する必要がある場合は、シェル・スクリプト(Linux/Unix)またはバッチファイル(MS Windowsの.bat)を作成する方が効率的です。次の例は、Windowsのスクリプト・ディレクトリにあるバッチファイル「list.bat」の呼び出しを示しています。このバッチファイルはパラメータとしてディレクトリを受け取り、その内容をdir.txtというファイルにリストアップする。スクリプトのパスにはスペースが含まれることがあるので、バッチファイルとパラメータの両方を二重引用符で囲む必要があります。
list.batファイル:
echo off dir %1 > %1dir.txt
Exec 呼び出し:
Exec "\"{_SCRIPT_DIR}\list.bat\"\Exec "{_SCRIPT_DIR}}list.bat" "
環境変数は、_ENV_ 接頭辞付き変数の形でスクリプトに表示されます。環境変数はスクリプトに_ENV_接頭辞付き変数の形で表示されます。 tool panel.
リリース 7.2.9 までは、これらは読み込み専用で、変数の変更は Exec によって作成されたプロセスには渡されません。
7.2.10 以降では、プロセスに対してこれらの変数を設定することができます。
この例では、MS Windows 上での変数の設定を示します。echo コマンドは、実行ログに記録される変数の値を表示します:
Var _ENV_Hello=Hello!
Exec "cmd /c echo Var Hello value: %Hello%"
Log "{_EXEC_OUTPUT}"
次のプロセスで変更を戻す必要がある場合は、"Varg delete":
Varg delete name="_ENV_Hello"
Exec "cmd /c echo Var Hello value: %Hello%"
Log "{_EXEC_OUTPUT}"
Exec コマンドは、以下のように 4 つの _EXEC 接頭辞付き変数を入力します:
変数名 | 変数名 |
|---|---|
_EXEC_OUTPUT=<text> | 実行されたコマンドの標準出力(コンソールに出力されるテキスト)。プロセスが終了するまで待機しないようにコマンドが設定されている場合(nowait=true)、この変数は作成されません。 |
_EXEC_ERROR=<text> | 実行されたコマンドのエラー出力(コンソールに出力されるエラーメッセージ)。コマンドがプロセスの終了まで待たないように設定されている (nowait=true)場合、この変数は作成されません。 |
_EXEC_COMMAND=<command> | 最後に実行されたOSコマンド(Execコマンドの引数)。 |
_EXEC_VALUE=<number> | 実行されたOSコマンドの終了コード(整数)。 |
_EXEC_PROCESS_ID=<number(s)> | 後で "Exec kill={_EXEC_PROCESS_ID}" でプロセスを終了させるために使うことができる。v3.5.2 以降でサポートされています。 |
SYNOPSIS
Exec <command> \[count=<number>\] \[nowait=<false|true>\] \[onpass=<command>\] \[onfail=<command>\] \[outfile=<file_name>\] \[wait=<time>\] \[kill=<process(es)>\]{_} {_}\[autokill=<false|true>\]
exec kill=<process(es)> \[wait=<time>\]
赤色は必須パラメータ
オプション
<command>
-ローカルシステムで実行するOSコマンド。OS固有の詳細についてはcommand descriptionを参照してください。
count=<数値>
-コマンドを何回実行するか。デフォルト値は1(1回実行)。
nowait=<false|true>
-OS コマンドが終了するまで Exec がスクリプトを待機させるかどうかを指定するフラグ (v3.4 以降でサポート)。デフォルト値は false で、待たせます。
値が true に設定されている場合、Exec コマンドは結果を待たず、プロセスが開始された直後にスクリプトが続行されます。EXEC_OUTPUT 変数と _EXEC_ERROR 変数は、Exec コマンドが呼び出したスクリプトに制御を戻すときに出力がわからないため、代入されません。EXEC_ERROR 変数は、基礎となる OS が指定されたコマンドの起動に失敗し、それを直ちに Robot に報告する場合に作成されます。
onpass=<コマンド>
-実行に成功した場合(終了コード0が返された場合)に実行されるT-Planロボットのコマンド。一つのコマンドでなければなりません。実行するコマンドのシーケンスを定義する必要がある場合は、Execコマンドの戻り値を基にしたプロシージャやif/else構文を使用してください。
onfail=<コマンド>
-実行に失敗した場合(ゼロ以外の終了コードが返された場合)に実行されるT-Planロボットのコマンド。一つのコマンドでなければなりません。実行する一連のコマンドを定義する必要がある場合は、Execコマンドの戻り値を基にしたプロシージャやif/else構文を使用してください。
outfile=<ファイル名>
-コマンド出力を保存するファイル名(オプション)。ファイル名だけを指定した場合は、現在の作業ディレクトリ(Robotを起動したディレクトリ)に作成されます。スクリプトの場所やロボットのインストールディレクトリからの相対パスを指定するには _SCRIPT_DIR または _INSTALL_DIR 変数を使います。例えば、出力ファイルをスクリプトフォルダに格納するには outfile="{_SCRIPT_DIR}out.txt" とします。
wait=<時間>
-コマンド実行後の待ち時間(オプション)。デフォルト値は0(待たない)。スクリプトは、"Var _EXEC_WAIT=1s "のように、_EXEC_WAIT変数に希望の遅延時間を代入することで、デフォルト値を設定することができる。
kill=<プロセス>
-指定された通常の番号、またはセミコロンで区切られた番号のリストで識別されるプロセスを kill します。v3.5.2 以降でサポートされています。execコマンドがnowait=trueで実行されるたびに、開始されたプロセスに普通番号を与えます。この番号を使用してプロセスを終了させることができます。nowaitパラメータを指定せずに起動されたプロセスや、nowait=falseで起動されたプロセスには、killは適用できません。このようなプロセスには番号も振られません。
Exec nowait=true "を複数回実行する複雑なスクリプトでは、_EXEC_PROCESS_ID変数からプロセス番号を知ることができます。例
// myapp.exeを起動し、そのIDを保存する。
Exec "myapp.exe" nowait="true"
Var MYAPP_ID="{_EXEC_PROCESS_ID}"
...
Exec kill="{MYAPP_ID}"
注意:Windowsでは、Windows OSが内部的にプロセスを整理してアクセスする方法のため、Exec Killを使って直接の子プロセスをkillすることしかできません。従って、サブ(孫)プロセスを殺すには、CMD taskkill を使ってください:実行 "cmd.exe /C taskkill /f /im <プロセス名>".
autokill=<false|true>
-スクリプト終了後にプロセスを kill するかどうかを指定するフラグ (v3.5.2 以降でサポート)。nowait=trueで起動されたプロセスにのみ適用される。デフォルト値は false (kill しない)。
戻り値
コマンドが正常に実行された場合は 0 (ゼロ) を返し、そうでない場合は OS コマンドの終了コードを返します。
例
Exec "ls -l"
カレント・ディレクトリの内容をリストする(Unix/Linux)。このリストは_EXEC_OUTPUT変数で見ることができます。
Exec "date"
Screenshot image.png desc="This screenshot was taken on {_EXEC_OUTPUT}."
スクリーンショットの説明にタイムスタンプを挿入するには、
dateOS コマンドを使用します(Unix/Linux)。
Exec "C:\Program Files\Internet Explorer\iexplore.exe http://www.google.com/"
Exec "rundll32 url.dll,FileProtocolHandler http://www.google.com/"
どちらのコマンドも、Windows上でInternet Explorerを起動し、Googleサイトを開くはずです。
Report index.html
Exec "mozilla file://{_REPORT_FILE}"
-HTMLレポートを作成し、ローカル・マシンのMozillaブラウザで開く。変数_REPORT_FILEはコマンドによって入力されます。Reportコマンドによって入力され、レポートファイルのフルパスが格納されます。
// 操作対象のディレクトリ
Var DIR=/tmp
// ディレクトリの内容を表示する(Linux/Unix)。
// Windowsの場合は「ls」コマンドを"cmd.exe /C dir /B"に置き換えてください
Exec "ls {DIR}"
// ディレクトリ一覧を行で分割する
String split "{_EXEC_OUTPUT}" pattern="\r?\n"
for (i=1; {i}<{_STRING_COUNT}+1; i={i}+1) {
// 浮動小数点数をインデックスから置き換える(2.3.3以降では不要)
String replace "{i}" pattern="[.].*" replacement=""
Var f="{_STRING{i}}"
// ファイルが.pngまたは.jpg画像の場合、3秒間表示する
if ("{f}" endswith ".png" || "{f}" endswith ".jpg") {
Connect "file://{DIR}/{f}"
Wait 3s
}
}
ディレクトリに対して画像のスライドショーを実行します。ここでは Exec コマンドを呼び出してディレクトリの内容をリストアップし、"String split" を使って個々のファイル(1行に1ファイルを想定)にパースします。解析された文字列(ファイル名)は、既知の拡張子を持つ画像かどうかチェックされ、ロボットのデスクトップビューに3秒間表示されます。