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

node.js 标准/错误输出 和 process.exit的更多相关文章

  1. Node.js之错误处理与断言处理

    Node.js之错误处理与断言处理 1. 使用 domain 模块处理错误 try..catch 多用于捕捉同步方法中的抛出错误,但不能用try..catch捕捉异步方法中抛出de错误 如: 1 va ...

  2. Node.js之错误处理

    Node.js之错误处理 1. 使用 domain 模块处理错误 try..catch 多用于捕捉同步方法中的抛出错误,但不能用try..catch捕捉异步方法中抛出de错误 如: 1 var htt ...

  3. Node.js标准的回调函数

    Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果. function (err, data) 当正常读取时,err参数为null,data参数为读取到的String.当读取发生 ...

  4. The Node.js Event Loop, Timers, and process.nextTick() Node.js事件循环,定时器和process.nextTick()

    个人翻译 原文:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ The Node.js Event Loop, Ti ...

  5. python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出

    看了一个博客,挺不错的.http://www.cnblogs.com/turtle-fly/p/3280519.html 标准输出(sys.stdout)对应的操作就是print(打印)了,标准输入( ...

  6. Linux的标准输出、标准错误输出、nohup

    1.在bash中标准输出可以用1来表示:通常来说这个1可以省略: 如./xxx >/dev/null 和 ./xxx 1>/dev/null 是一个意思 2.在bash中标准错误输出可以用 ...

  7. bash shell:重定向标准错误输出

    如何重定向标准错误输出到标准输出?如何把标准错误输出输出到一个文件? Bash提供了I/O重定向工具,有3个缺省的文件(标准输出流): stdin - 用来获取输入,比如键盘.文件重定向 stdout ...

  8. shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出

    shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出 如: #/bin/sh local ret='sqlite3 test.db "select test ...

  9. linux将标准输出和标准错误输出都重定向到一个文件?

    需求描述: 今天在写crontab,里面有标准输出和错误输出,之前使用的是 > /dev/null 2>&1 那这个意思也就等同于将标准输出和错误输出都输出到/dev/null中, ...

随机推荐

  1. Android之找回打包key密码的方法

    昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了.蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合做 ...

  2. LINQ to XML 建立,读取,增,删,改

      LINQ to XML的出现使得我们再也不需要使用XMLDocument这样复杂的一个个的没有层次感的添加和删除.LINQ可以使的生成的XML文档在内存中错落有致.下面以一个小的例子说名LINQ ...

  3. django外键以及主表和子表的相互查询

    Django的外键使用 from django.db import models # Create your models here. class Category(models.Model): na ...

  4. golang常用模块介绍

    golang模块 一.命令行库Cobra Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具.Cobra同时也是一个程序, 用于创建CLI程序 https://www.jian ...

  5. maven清理.lastUpdated文件maven清理下载失败的jar,方便重新下载

    因网络或其他的原因,maven下载jar等文件失败后,会在目录中存在  *.jar.lastUpdated ,如:xmlpull-1.1.3.1.jar.lastUpdated,此时,代码编译时会一直 ...

  6. jvm垃圾回收原理(转)

    原文链接:jvm垃圾回收原理 在jvm中堆空间划分为三个代:年轻代(Young Generation).年老代(Old Generation)和永久代(Permanent Generation).年轻 ...

  7. codeforce 192 div2解题报告

    今天大家一起做的div2,怎么说呢,前三题有点坑,好多特判.... A. Cakeminator 题目的意思是说,让你吃掉cake,并且是一行或者一列下去,但是必须没有草莓的存在.这道题目,就是判断一 ...

  8. source insight 4.0.086破解

     source insight 4.0.093 破解: 1. 安装原版软件:Source Insight Version 4.0.0093 - March 20, 2018 2. 替换原主程序:sou ...

  9. Go语言之进阶篇实现并发聊天功能

    1.并发聊天服务器原理分析 2.并发聊天室 功能: 广播消息.广播上线. 查询在线用户.修改用户名.用户主动退出.超时处理 示例: package main import ( "fmt&qu ...

  10. 首个threejs项目-前端填坑指南【转】

    http://www.cnblogs.com/pursues/p/5226807.html 第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水 ...