「PIONE定義書のTIPS」の版間の差分
提供: Eospedia
行10: | 行10: | ||
*Mainルールのoutputファイルは必ずいずれかのルールで全て作成されているか。<br> | *Mainルールのoutputファイルは必ずいずれかのルールで全て作成されているか。<br> | ||
*パラメータのブロック定義はルール内では使用できない。<br> | *パラメータのブロック定義はルール内では使用できない。<br> | ||
+ | <br> | ||
+ | |||
+ | === [[pione action exec]]を[[PIONE定義書]]で使用したいとき === | ||
+ | [[pione action exec]]は[[アクション文書]](.mdファイル)の[[マークダウン]]で記述されたルールを単独で実行することができますので、デバッグの際に非常に有効なコマンドであるといえます。しかし、この[[pione action exec]]は通常の[[PIONE定義書]]に対応していません。元の[[アクション文書]]が無い場合(コンパイルでなく直接の記述で[[PIONE定義書]]を作成した場合)、そのままのフォーマットでは[[pione action exec]]が使用できません。[[PIONE定義書]]を下記のように記述すれば、[[pione-client]]でも実行でき、かつ[[pione action exec]]も使用できます。<br> | ||
+ | <br> | ||
+ | |||
+ | <pre> | ||
+ | Rule Main | ||
+ | output 'out.txt' | ||
+ | Action | ||
+ | |||
+ | # この中はpione-clientのみの動作を記述可能 | ||
+ | Out={$O[1]} | ||
+ | |||
+ | :<<: | ||
+ | ※ ↓## (ルール名)の上は必ず1行空ける | ||
+ | |||
+ | ## Main | ||
+ | ``` | ||
+ | # この中はpione action execのみの動作を記述可能(#:: 〜 :<<:までがどちらも実行される処理) | ||
+ | Out='out.txt' | ||
+ | |||
+ | #:: | ||
+ | # この中はどちらも実行される | ||
+ | echo "Message for Shell" | ||
+ | echo "Message for File" > $Out | ||
+ | :<<: | ||
+ | ``` | ||
+ | :: | ||
+ | |||
+ | # この中はpione-clientのみの動作を記述可能 | ||
+ | |||
+ | End | ||
+ | </pre> | ||
+ | このように記述すれば、[[PIONE定義書]]でも[[pione action exec]]に対応できるようになります。<br> | ||
+ | <br> | ||
+ | |||
+ | [[pione-client]]で実行した場合<br> | ||
+ | <pre> | ||
+ | $ pione-client test.pione | ||
+ | ==> &Anonymous:Root([],{}) | ||
+ | --> Rule Application: &Anonymous:Root([],{}) | ||
+ | --> Distribution: &Anonymous:Root([],{}) | ||
+ | >>> &Anonymous:Main([],{}) | ||
+ | ==> &Anonymous:Main([],{}) | ||
+ | |||
+ | -中略- | ||
+ | |||
+ | <== &Anonymous:Main([],{}) | ||
+ | <-- Distribution: &Anonymous:Root([],{}) | ||
+ | <-- Rule Application: &Anonymous:Root([],{}) | ||
+ | <== &Anonymous:Root([],{}) | ||
+ | $ cat process/output/out.txt | ||
+ | Message for File | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | [[pione action exec]]で実行した場合<br> | ||
+ | <pre> | ||
+ | $ pione action exec test.pione Main | ||
+ | Message for Shell | ||
+ | $ cat out.txt | ||
+ | Message for File | ||
+ | </pre> | ||
<br> | <br> |
2014年12月26日 (金) 05:19時点における版
ここではPIONE定義書に関するTIPSを示します。実装例はPIONEチュートリアル、PIONEチュートリアル-PNML、実行例はPIONE Webclientチュートリアルをご覧下さい。
デバッグ
構文エラーに関する注意点
下記に陥りやすい構文ミスやルールを記載します。
*rule名の先頭を数字で定義することはできない。(× 3Dto2D, ○ Ref3Dto2D)
*ルールヘッダーはRule、フロー定義ではruleを書く。
*Mainルールのinputファイルはpione-clientの-iで指定しているディレクトリ内に全てあるか。
*Mainルールのoutputファイルは必ずいずれかのルールで全て作成されているか。
*パラメータのブロック定義はルール内では使用できない。
pione action execをPIONE定義書で使用したいとき
pione action execはアクション文書(.mdファイル)のマークダウンで記述されたルールを単独で実行することができますので、デバッグの際に非常に有効なコマンドであるといえます。しかし、このpione action execは通常のPIONE定義書に対応していません。元のアクション文書が無い場合(コンパイルでなく直接の記述でPIONE定義書を作成した場合)、そのままのフォーマットではpione action execが使用できません。PIONE定義書を下記のように記述すれば、pione-clientでも実行でき、かつpione action execも使用できます。
Rule Main output 'out.txt' Action # この中はpione-clientのみの動作を記述可能 Out={$O[1]} :<<: ※ ↓## (ルール名)の上は必ず1行空ける ## Main ``` # この中はpione action execのみの動作を記述可能(#:: 〜 :<<:までがどちらも実行される処理) Out='out.txt' #:: # この中はどちらも実行される echo "Message for Shell" echo "Message for File" > $Out :<<: ``` :: # この中はpione-clientのみの動作を記述可能 End
このように記述すれば、PIONE定義書でもpione action execに対応できるようになります。
pione-clientで実行した場合
$ pione-client test.pione ==> &Anonymous:Root([],{}) --> Rule Application: &Anonymous:Root([],{}) --> Distribution: &Anonymous:Root([],{}) >>> &Anonymous:Main([],{}) ==> &Anonymous:Main([],{}) -中略- <== &Anonymous:Main([],{}) <-- Distribution: &Anonymous:Root([],{}) <-- Rule Application: &Anonymous:Root([],{}) <== &Anonymous:Root([],{}) $ cat process/output/out.txt Message for File
pione action execで実行した場合
$ pione action exec test.pione Main Message for Shell $ cat out.txt Message for File