実行例
オプション必須項目のみの場合
引数にPIONE定義書を指定して実行します。
$ pione-client HelloWorld.pione
==> &Anonymous:Root([],{})
--> Rule Application: &Anonymous:Root([],{})
--> Distribution: &Anonymous:Root([],{})
>>> &Anonymous:Main([],{})
==> &Anonymous:Main([],{})
SH ------------------------------------------------------------
SH echo "Hello PIONE world !" > message.txt
SH ------------------------------------------------------------
<-- Distribution: &Anonymous:Root([],{})
<== &Anonymous:Main([],{})
<-- Rule Application: &Anonymous:Root([],{})
<== &Anonymous:Root([],{})
$ ls ./process/
output pione-process.log
$ cat ./process/output/message.txt
Hello PIONE world !
-b指定なしなので、processディレクトリが作成され、その中に入力(今回は無い)、出力、ログが格納されます。
オプション -b
-bにてディレクトリ名を指定して実行します。
$ pione-client HelloWorld.pione -b BaseDir
==> &Anonymous:Root([],{})
--> Rule Application: &Anonymous:Root([],{})
--> Distribution: &Anonymous:Root([],{})
>>> &Anonymous:Main([],{})
==> &Anonymous:Main([],{})
SH ------------------------------------------------------------
SH echo "Hello PIONE world !" > message.txt
SH ------------------------------------------------------------
<== &Anonymous:Main([],{})
<-- Distribution: &Anonymous:Root([],{})
<-- Rule Application: &Anonymous:Root([],{})
<== &Anonymous:Root([],{})
$ ls BaseDir/
output pione-process.log
$ cat BaseDir/output/message.txt
Hello PIONE world !
BaseDirディレクトリが作成され、その中に結果などが格納されています。
オプション --dry-run
$ pione-client HelloWorld.pione --dry-run
==> &Anonymous:Root([],{})
--> Rule Application: &Anonymous:Root([],{})
--> Distribution: &Anonymous:Root([],{})
>>> &Anonymous:Main([],{})
==> &Anonymous:Main([],{})
SH ------------------------------------------------------------
SH echo "Hello PIONE world !" > message.txt
SH ------------------------------------------------------------
<-- Distribution: &Anonymous:Root([],{})
<-- Rule Application: &Anonymous:Root([],{})
<== &Anonymous:Root([],{})
<== &Anonymous:Main([],{})
$ ls ./process/
output pione-process.log
$ cat ./process/output/message.txt
$
ドライランモードではシェルスクリプトの実行をせず、出力ファイルを空ファイルで作成します。
オプション -i
-iにて入力データ用のディレクトリ名を指定して実行します。
Multiplying.pione
Rule Main
input 'test.in'
output 'test.out'
Action
awk '{ print $1*2 }' {$I[1]} > {$O[1]}
End
上記のPIONE定義書は入力データtest.inを必要としていますので、test.inのディレクトリ名を相対パスで設定します。
MultiplyingInput内
$ ls MultiplyingInput
test.in
実行結果
$ pione-client Multiplying.pione -i MultiplyingInput/
==> &Anonymous:Root([.DS_Store,test.in],{})
--> Rule Application: &Anonymous:Root([.DS_Store,test.in],{})
--> Distribution: &Anonymous:Root([.DS_Store,test.in],{})
>>> &Anonymous:Main([test.in],{})
==> &Anonymous:Main([test.in],{})
SH ------------------------------------------------------------
SH awk '{ print $1*2 }' test.in > test.out
SH ------------------------------------------------------------
<-- Distribution: &Anonymous:Root([.DS_Store,test.in],{})
<== &Anonymous:Main([test.in],{})
<-- Rule Application: &Anonymous:Root([.DS_Store,test.in],{})
<== &Anonymous:Root([.DS_Store,test.in],{})
$ ls process/
input output pione-process.log
$ ls process/input/
test.in
MultiplyingInput内のデータを入力としてprocess/input内にコピーし、処理を実行しています。
オプション --params
ParamTest.pione
param $val
Rule Main
output 'message.txt'
Action
echo "{$val}" > message.txt
End
上記のPIONE定義書は変数としてvalが宣言されてそれをmessage.txtに書き込む処理です。--paramsよりvalに値を入れて実行します。
実行結果
$ pione-client ParamTest.pione --params='{val:123}'
"{val:123}"
==> &Anonymous:Root([],{})
--> Rule Application: &Anonymous:Root([],{})
--> Distribution: &Anonymous:Root([],{})
>>> &Anonymous:Main([],{})
==> &Anonymous:Main([],{})
SH ------------------------------------------------------------
SH echo "123" > message.txt
SH ------------------------------------------------------------
<-- Distribution: &Anonymous:Root([],{})
<== &Anonymous:Main([],{})
<-- Rule Application: &Anonymous:Root([],{})
<== &Anonymous:Root([],{})
$ cat process/output/message.txt
123
val=123としてmessage.txtに書き込まれました。
オプション --rehearse
入力ファイルの準備
シナリオを含んだパッケージを入力ファイルとします。
Multiplying.pione
.@ PackageName :: "Multiplying"
param val := 1
Rule Main
input 'test.in'
output 'test.out'
Action
awk '{ print $1*{$val} }' {$I[1]} > {$O[1]}
End
上記のPIONE定義書は入力データtest.inを必要としていますので、test.inのディレクトリ名を相対パスで設定します。
/SnarioMulti/input/test.in
1
2
3
4
/SnarioMulti/Scenario.pione
.@ ScenarioName :: "Multi4"
.@ ParamSet :: "{val:4}"
今回はtest.inの値を4倍にするシナリオとしています。
これらのファイルをpione package buildでパッケージ化します。(/testディレクトリに作成した場合)
$ pione package build test/
info: update the package info file: local:/test/pione-package.json
info: update the scenario info file: local:/test/SinarioMulti/pione-scenario.json
info: Package local:/Multiplying.ppg has been built successfully.
実行結果
$ pione-client Multiplying.ppg --rehearse "Multi4"
==> &Multiplying:Root([test.in],{})
--> Rule Application: &Multiplying:Root([test.in],{})
--> Distribution: &Multiplying:Root([test.in],{})
>>> &Multiplying:Main([test.in],{})
==> &Multiplying:Main([test.in],{})
SH ------------------------------------------------------------
SH awk '{ print $1*4 }' test.in > test.out
SH ------------------------------------------------------------
<== &Multiplying:Main([test.in],{})
<-- Distribution: &Multiplying:Root([test.in],{})
<-- Rule Application: &Multiplying:Root([test.in],{})
<== &Multiplying:Root([test.in],{})
info: Rehearsal Result: Succeeded
/process/output/test.out
4
8
12
16
test.inに対して全ての値が4倍されています。
outputの確認
シナリオの中にoutputディレクトリを含めることもできますが、これは作成されたファイルとこの中のデータを比較して一致していることと存在していることを確かめることに使用します。
一致する場合
/SnarioMulti/output/test.out
4
8
12
16
上記を含めてパッケージを作成し、実行してみます。
$ pione-client Multiplying.ppg --rehearse "Multi4"
==> &Multiplying:Root([test.in],{})
--> Rule Application: &Multiplying:Root([test.in],{})
--> Distribution: &Multiplying:Root([test.in],{})
-中略-
<-- Rule Application: &Multiplying:Root([test.in],{})
<== &Multiplying:Root([test.in],{})
info: Rehearsal Result: Succeeded
Rehearsal Result: Succeededと表示され、出力ファイルが想定通りであると判断できます。
データが違う場合
/SnarioMulti/output/test.out
1
2
3
4
上記を含めてパッケージを作成し、実行してみます。
$ pione-client Multiplying.ppg --rehearse "Multi4"
==> &Multiplying:Root([test.in],{})
--> Rule Application: &Multiplying:Root([test.in],{})
--> Distribution: &Multiplying:Root([test.in],{})
-中略-
<-- Rule Application: &Multiplying:Root([test.in],{})
<== &Multiplying:Root([test.in],{})
Rehearsal Result: Failed
- test.out is different from expected result.
... is different from expected result.と表示され、出力ファイルが意図した通りでないことが分かります。
ファイルが存在しない場合
/SnarioMulti/output/test.output
4
8
12
16
上記を含めてパッケージを作成し、実行してみます。
$ pione-client Multiplying.ppg --rehearse "Multi4"
==> &Multiplying:Root([test.in],{})
--> Rule Application: &Multiplying:Root([test.in],{})
--> Distribution: &Multiplying:Root([test.in],{})
-中略-
<-- Rule Application: &Multiplying:Root([test.in],{})
<== &Multiplying:Root([test.in],{})
Rehearsal Result: Failed
- test.output doesn't exist.
... doesn't exist.と表示され、想定しているファイルが作成されなかったことが分かります。