专栏首页拂晓风起node.js 标准/错误输出 和 process.exit

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

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

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

这里说的标准,是指回调函数,一般有err作为第一个参数,然后是具体的数据。

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

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

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

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

那么问题来了,如果我们自己用node.js写一个简单脚本,让其他node程序去调用,怎么模仿实现一样的返回情况呢?

其他程序调用的时候,可能是这样:

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

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

奇了怪了,console.error不就是错误输出吗?好吧,这只能怪自己写web写多了,然后node.js并不是这样的。

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

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的数字。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Firefox扩展开发 (插件开发) Extension开发 入门教程 5步走 五步走

    用户1258909
  • 关于0xFFFFFFFF和alpha,温故而知新

    用户1258909
  • Firefox显示中文字太小的问题 (改变Firefox最小字体)

    用户1258909
  • 比特币钱包浅谈

    这是「区块链技术指北」的第 2 篇文章。 私钥即财富,这是区块链世界的金科定律。 首先我们来看币中之王 BTC。BTC 是迄今为止最为成功的区块链项目,也是市值...

    robinwen
  • 有些java程序员为什么薪水那么高?

    其实不仅仅是有些java工程师的薪水高,在软件行业做的很出色的程序员薪水都不会太低,而且大部分还有股权,在国内开发环境下技术能力过硬还是比较容易拿到高薪的,高薪...

    程序员互动联盟
  • 《星球大战7》要来了,BB-8机器人萌翻了

    《星球大战7》还要等到12月才上映!! 为什么夏天还没到啊!掀桌掀桌已经等不及了! “2015星球大战盛典”于今日刚刚落下帷幕,活动现场不仅有天行者、蕾娅...

    机器人网
  • 从案例出发,由浅到深了解 iOS 动画

    iOS 的动画框架很成熟,提供必要的信息,譬如动画的起始位置与终止位置,动画效果就出来了

    猿_人类
  • AI 三分钟 | 每天 3 分钟 回顾过去 24 小时 AI 热点事件草稿

    每天 3 分钟, 回顾过去 24 小时 AI 热点事件 & 投资事件 。

    腾讯AI加速器
  • 用Go实现一门解释型语言

    A interpreter language implementation in Go

    李海彬
  • 区块链所有的钱包都有漏洞

    随着钱包热兴起,很多新厂商加入这一战场,但它们对安全的理解往往不到位。这大大增加了安全隐患。

    用户2357564

扫码关注云+社区

领取腾讯云代金券