読者です 読者をやめる 読者になる 読者になる

Node.js のプロセス処理を少し学ぶ

IoT をする前に Node.js のプロセス処理について
簡単に学習することにした。

概要

プログラム開始後にキー入力待機状態にし、
入力ごとに以下のように処理を実行させる。
* 「end」と入力するとプログラムを終了する。
* それ以外の場合、「Input: XXXXX」(XXXXX は入力値)と表示する。

<参考文献>

プログラムの内容

ソースコード
// eventsPra.js

var fs = require('fs'); 

// キーの入力待ち状態にする。
process.stdin.resume();
process.stdin.setEncoding('utf8');

// 標準入力終了時のイベント処理
process.stdin.on('end', function() {
    console.log('END!!');
});

// 入力された1行を読み込んだ時のイベント処理
process.stdin.on('data', function(inputData) {
    // 末尾の改行を取り除く。
    var input = inputData.slice(0, -1);
    if (input == 'end') {
        // end が入力された場合、プロセスを終了する。
        process.exit(0);
    } else {
        console.log('Input: ' + input);
    }
});

// Ctrl + C が入力された場合のイベント処理
process.on('SIGINT', function() {
    console.log('Ctrl+C!!');
    // プロセスを終了する。
    process.exit(0);
});

// プロセス終了時のイベント処理
process.on('exit', function() {
    console.log('EXIT!!');
});
挙動確認

プログラムを実行してみる。

//入力
abc
end
//出力
Input: abc
EXIT!!

次に、プログラム実行中に「Ctrl+C」と入力すると、

^CCtrl+C!!
EXIT!!

と表示される。
また、プログラム実行中に「Ctrl+D」と入力すると、

END!!
EXIT!!

と表示される。

考察

標準入力からの入力待ちにするには、
process.stdin.resume() の呼び出しが必要です。
そして標準入力のイベント処理は、
「process.stdin.on(イベント名, コールバック関数)」で設定します。
キー入力はイベント名「data」で、
入力値はコールバック関数の第1引数に渡されるようです。
また、「Ctlr+C」と入力するとプロセスに「SIGINT」のシグナルが送られるので、
「Ctrl+C」の入力はこのイベントを拾うことで設定できます。
ただし、「SIGINT」のリスナの登録を行うとプログラム終了の処理が
働かなくなるので、明示的にプロセスを終了させる必要があります。

後書き

今回の内容を踏まえて、次回はLEDの点灯制御を行っていこうかと思います。