Execノードを使う

ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回はExecノードです。Execノードを使うと外部のコマンドを実行することができます。コマンドが出力した、標準出力や標準エラー出力などをノードから出力できます。

標準出力の内容を出力する

最初に確認するサンプルは「flows > node-red > function > exec > 01 - Get standard output from external command」です。


Execノードのプロパティを見ると以下の通りになっています。
  • 実行コマンドは「echo
  • msg.payloadで受け取った値を引数として利用
  • 出力モードは「コマンド終了時 - execモード
    • コマンド終了時に結果を出力します


Execノードには出力ポートが3つあります。
  • 標準出力
  • 標準エラー出力
  • 返却コード
実行すると、標準出力には「Hello World!」、返却コードには「{code : 0}」が出力されます。この挙動は特に説明することはないかと思います。



標準エラー出力の内容を出力する

次に確認するサンプルは「flows > node-red > function > exec > 02 - Get error output from external command」です。外部コマンドのエラーをポートに出力します。中身は先程のサンプルフローとほぼ同じですが、Execノードで存在しないコマンドを実行しています。



実行すると、以下のログが出力されます。これも説明不要かと思います。



実行中に出力する

最後に確認するサンプルは「flows > node-red > function > exec > 03 - Run external command in spawn mode」です。出力がコマンド実行中に行われるのがこれまでのサンプルと違う点です。
コマンドはwhieループ内で2秒おきに「Hello」を標準出力に出力し続けます。Spawnモードで実行するとループ内でechoコマンドが実行されるたびにログが出力されます。サービスっぽい挙動をするものSpawnモードで実行すると良さそうです。


試しに、ここで出力を「コマンド終了後 - execモード」に変更すると、Kill processでプロセスを終了したタイミングでログがまとめて出力されます。ちなみに、「Kill process」Injectノードは「msg.kill」に適当な値を設定しています。Execノードがこのメッセージを受け取ると実行中のコマンドを中止することができるようです。

まとめ

Execコマンドを利用して外部コマンドが実行できました。
  • 標準出力、標準エラー出力、返却コードを出力ポートに出せる
  • execモードはコマンド終了時に結果が出力される
  • spawnモードはコマンド実行中に結果が出力される
  • msg.killに適当な値を設定したメッセージをExecノードに与えるとプロセスを中断できる

コメント

このブログの人気の投稿

Joinノードを使う(その1)

Joinノードを使う(その4)