情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsで子プロセスの標準入出力を処理する

子プロセスを起動する詳しい方法に関しては下の記事を参照してください。

ChildProcess.stdinChildProcess.stdoutChildProcess.stderrは子プロセスの標準入力、標準出力、標準エラー出力のストリームです。

このストリームには文字コードが設定されていない可能性があるため、自分で文字コードを設定すべきです。

ストリームの詳しい使い方に関しては下の記事を参照してください。

サンプルコード1

親プロセスで子プロセスの標準出力と標準エラー出力を処理します。

child-process-spawn-stdio.js

var childProcess = require('child_process');

var p = childProcess.spawn('node', ['child-process.js']);
p.on('exit', function (code) {
    console.log('child process exited.');
});
p.on('error', function (err) {
    console.error(err);
    process.exit(1);
});
p.stdout.setEncoding('utf-8');
p.stdout.on('data', function (data) {
  console.log(data);
});
p.stderr.setEncoding('utf-8');
p.stderr.on('data', function (data) {
  console.error(data);
});

child-process.js

console.log('from console.log in child process.');
console.error('from console.log in child process.');

実行結果

C:\work\node>node child-process-spawn-stdio.js
from console.log in child process.

from console.error in child process.

child process exited.

サンプルコード2

親プロセスで子プロセスの標準入力を処理します。

child-process-spawn-stdio-2.js

var childProcess = require('child_process');

var p = childProcess.spawn('node', ['child-process-2.js'], { stdio: ['pipe', 'inherit', 'inherit'] });
p.on('exit', function (code) {
    console.log('child process exited.');
});
p.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

p.stdin.write('t');
p.stdin.write('e');
p.stdin.write('s');
p.stdin.write('t');
p.stdin.write('\n');
p.stdin.write('i');
p.stdin.write('n');
p.stdin.write('p');
p.stdin.write('u');
p.stdin.write('t');

child-process-2.js

var input = '';
process.stdin.setEncoding('utf-8');
process.stdin.on('data', function(data) {
    console.log(data);
    input += data;
    if (input.length == 10) {
        process.exit(0);
    }
});

実行結果

C:\work\node>node child-process-spawn-stdio-2.js
test
input
child process exited.

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js