node.js 标准/错误输出 和 process.exit

node.js中,各类模块有一种标准的写法:node

this._process.exec(command, options, function (err, stdout, stderr) {
            callback(err, stdout, stderr);
        })

这里说的标准,是指回调函数,通常有err做为第一个参数,而后是具体的数据。linux

 

写服务器程序的时候,或多或少会用到child_process这个模块,而这个模块的用法正如上边代码所示。web

例如调用一个shell命令删除文件,能够这样:shell

    child_process.exec('rm -rf xxxx', function (err, stdout, stderr) {
            callback(err, stdout, stderr);
        })

返回的参数,其实err是一个对象,而stdout和stderr是字符串,stdout就是执行的子进程中使用标准输出的信息,而stderr就是子进程中错误输出流的内容。服务器

 

那么问题来了,若是咱们本身用node.js写一个简单脚本,让其余node程序去调用,怎么模仿实现同样的返回状况呢?函数

其余程序调用的时候,多是这样:this

child_process.exec('node doSomething.js', function (err, stdout, stderr) {
            callback(err, stdout, stderr);
        })

若是咱们在子进程中,使用console.log/error打印信息,结果,会发现,在父进程的回调函数中将什么都得不到。spa

奇了怪了,console.error不就是错误输出吗?好吧,这只能怪本身写web写多了,而后node.js并非这样的。prototype

 

接下来就要介绍三个玩意,分别对应stdout、stderr和err。code

process.stdout.write
process.stderr.write
process.exit(非0)

 

write函数接受的是一个字符串,那么为了方便使用,咱们能够封装一下:

console.error = function () {
    var msg = Array.prototype.join.call(arguments, ', ');
    process.stderr.write(msg);
};

 

最后,若是程序跑出错,除了在stderr中输出信息外,咱们还可能须要马上终止程序。

按照linux的规范,通常成功用0表示,而非0则表示失败。那么process.exit也遵循这个规范。

  • process.exit(0)表示成功完成,回调函数中,err将为null;
  • process.exit(非0)表示执行失败,回调函数中,err不为null,err.code就是咱们传给exit的数字。
相关文章
相关标签/搜索