1. ホーム
  2. node.js

[解決済み】 Exec : stdout "live" を表示する。

2022-04-05 16:06:08

質問

私はこの単純なスクリプトを持っています。

var exec = require('child_process').exec;

exec('coffee -cw my_file.coffee', function(error, stdout, stderr) {
    console.log(stdout);
});

ここで、私は単にcoffee-scriptファイルをコンパイルするためのコマンドを実行します。しかし、コマンドは決して終了しないので、stdoutはコンソールに表示されません(coffeeの-wオプションのため)。 コンソールから直接コマンドを実行すると、次のようなメッセージが表示されます。

18:05:59 - compiled my_file.coffee

質問:これらのメッセージをnode.js execで表示することは可能でしょうか?もし可能なら、どのように?!

ありがとうございます。

解決方法は?

を使用しないでください。 exec . 使用方法 spawn であり EventEmmiter オブジェクトを作成します。そうすると stdout / stderr イベント ( spawn.stdout.on('data',callback..) ) 起こるがままに .

NodeJSのドキュメントより。

var spawn = require('child_process').spawn,
    ls    = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data.toString());
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data.toString());
});

ls.on('exit', function (code) {
  console.log('child process exited with code ' + code.toString());
});

exec は出力をバッファリングし、通常、コマンドの実行が終了した時点でそれを返します。