保存使用Nodejs调用的命令的输出

时间:2017-01-19 21:16:04

标签: node.js linux

我正在尝试使用nodeJS控制服务器。我可以使用nodeJS正确停止和启动服务器,但有时,由于某些意外错误,服务器可能无法启动。这些错误将输出到控制台。基于这些错误,我想执行各种各样的事情。为了得到这些错误,我使用了spawn函数,如下所示:

spawn('./startEngine.sh &> test.txt',[] , options);

但我似乎得到了ENOENT错误

Error: spawn ./startEngine.sh &> test.txt ENOENT
    at exports._errnoException (util.js:1026:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

我还尝试将'output to file'选项包含为spawn函数的args,但是当我这样做时,它似乎完全忽略它并输出到控制台。

spawn('./startEngine.sh',['&>', 'test.txt'] , options);

我应该采用不同的方式做某些事情,如果没有,那么还有其他方法可以将进程的输出转换为文本文件吗?提前谢谢你!

1 个答案:

答案 0 :(得分:1)

你可以听stdout和stderr并自己编写文件......

const child = spawn('./startEngine.sh',[] , options);
const ws = fs.createWriteStream('test.txt');

child.stdout.on('data', data => {
  ws.write(data);
});

child.stderr.on('data', data => {
  ws.write(`stderr: ${data}`);
});

child.on('close', code => {
  ws.write(`process exited with code ${code}`);
  ws.end();
});

child.on('error', err => {
  ws.write('error encountered', err.message);
  console.dir(err);
});