一尘不染

执行:显示标准输出“实时”

node.js

我有这个简单的脚本:

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

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

在这里,我只需执行一个命令即可编译咖啡脚本文件。但是stdout永远不会显示在控制台中,因为该命令永远不会结束(因为coffee的-
w选项)。如果我直接从控制台执行命令,则会收到如下消息:

18:05:59 - compiled my_file.coffee

我的问题是:是否可以使用node.js exec显示这些消息?如果是,怎么办?!

谢谢


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

不要使用exec。使用spawn哪个是EventEmmiter对象。然后,您可以在事件
发生时 收听stdout/ stderrevent(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 缓冲输出,通常在命令完成执行后将其返回。

2020-07-07