2

node.js で子プロセスのイベントをトラップできません。プロセスは正しく実行され、完了すると終了するので、問題ありません。Stdout も正しくパイプ処理されるため、出力が正常に表示されます。残念ながら、イベント ハンドラーがまったく起動しないため、プロセスが完了したときにコールバックを実行することが難しくなります。私のコードは以下の通りです:

var child = child_process.spawn('node',
    ['processor', reportId.toString()],
    { cwd:cwd, stdio:'pipe', env:env });

child.on('data', function(data) {
    console.log('Received data...');
    console.log(data.toString('utf8'));
});
child.on('message', function(message) {
    console.log('Received message...');
    console.log(message);
});
child.on('close', function(code) {
    console.log('Child process closed');
});
child.on('disconnect', function(code) {
    console.log('Child process disconnected');
    callback();
});
child.on('exit', function(code) {
    console.log('Child exited with code ' + code);
    callback();
});
child.stderr.pipe(process.stderr, { end:true });
child.stdout.pipe(process.stdout, { end:true });

私は何か間違ったことをしていると確信していますが、ドキュメントのどれも問題が何であるかについての手がかりを提供していないようです. 何か案は?

Windowsでノード0.10.8を実行しています。

4

1 に答える 1

5

Spawn にはforkと同じ ipc チャネルが組み込まれていないため、有効にしない限りメッセージイベントは発生しません。

var child = child_process.spawn('node', ['processor', reportId.toString()],{
    cwd:cwd, 
    env:env,
    stdio:['ipc'] //enable ipc channel
});

dataイベントは、子自体ではなく、子の stdout にある必要があります。

child.stdout.on('data', function(data) {
    console.log('Received data...');
    console.log(data.toString('utf8'));
});
于 2013-06-18T03:17:39.980 に答える