child_process 模块用于新建子进程。子进程的运行结果存储在系统缓存之中,等到子进程运行结束之后,主进程再用回调函数读取子进程的运行结果

1.exec()

  exec 方法用于执行base命令,它的参数是一个命令字符串

  

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

var ls = exec('ls -l', function() {
if (error) {
console.log(error.stack);
console.log('error code:' + error.node);
}
console.log('child Process STDOUT:' + stdout)
})

上面代码的exec方法用于新建一个子进程,然后缓存它的运行结果,运行结束后调用回调函数。

exec方法最多可以接受两个参数,第一个参数是所要执行的shell命令,第二个参数是回调函数,该函数接受三个参数,分别是发生的错误、标准输出的显示结果、标准错误的显示结果。

由于标准输出和标准错误都是流对象(stream),可以监听data事件,因此上面的代码也可以写成下面这样

var exec = require('child_process').exec;
var child = exec('ls -l'); child.stdout.on('data', function(data) {
console.log('stdout', data) ;
}) child.stderr.on('data', function (data) {
console.log('stdout', data) ;
}) child.on('close', function(code) {
console.log('closing code', code);
})

  上面的代码标明,子进程本身有close事件,可以设置回调函数。

  上面的代码还有一个好处,监听data事件之后,可以实时输出结果,否则只有等待子进程结束,才会输出结果,所以,

如果子进程运行时间较长,或者是持续运行,第二种写法更好

下面是另一个例子,假定有一个child.js文件

  

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

exec('node -v', function(error, stdout, stderr) {
console.log('stdout:', stdout);
console.log('stderr', srderr);
if (error !== null) {
console.log('exec error', error);
}
})

运行后,该文件的输出结果如下:

$node child.js

stdout : v0.11.14

stderr:

exec方法会直接调用bash(/bin/sh程序)来解释命令,所以如果用用户输入的参数,exec方法是不安全的

切记: 在用用户输入的情况相爱,最好不适用exec方法,而是是哟名execFile方法。

2.execSync()

  execSync是exec的同步执行版本

3.execFile方法直接执行特定的程序,参数作为数组传入,不会被bash解释,因此具有较高的安全性

  

var child_process = require('child_process');

var path = '.';
child_process.execFile('/bin/ls', ['-l', path], function(err, result) {
console.log(result);
})

上面代码中,假定path来自用户输入,如果其中包含了分好或者反引号,ls程序不理解他们的含义,因此也就

  

  

Node child_process Study.2的更多相关文章

  1. node child_process模块

    NodeJs是一个单进程的语言,不能像Java那样可以创建多线程来并发执行.当然在大部分情况下,NodeJs是不需要并发执行的,因为它是事件驱动性永不阻塞.但单进程也有个问题就是不能充分利用CPU的多 ...

  2. node.js study: cluster

    从v0.6.x开始,Node.js提供了多进程模块cluster,允许创建一组进程来共享同一个socket,并且分担负载压力.官方文档是这样说的:A single instance of Node.j ...

  3. node子进程(Child Process)获取硬盘分区

    node   child_process文档 child_process.exec(command[, options][, callback]) command <string> The ...

  4. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

  5. node.js(七) 子进程 child_process模块

    众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,通过多进程来实现 ...

  6. node之子线程child_process模块

    node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,用于新建子进程,子进程的 ...

  7. node.js中process进程的概念和child_process子进程模块的使用

    进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...

  8. Node.js进程通信模块child_process

    前言 Node.js是一种单线程的编程模型,对Node.js的赞美和诟病的也都是因为它的单线程模型,所有的任务都在一个线程中完成(I/O等例外).单线程模型,不仅让代码非常简洁,更是直接避免了线程调度 ...

  9. Node.js学习笔记(5)——关于child_process模块

    child_process是node一个比较重要的模块,通过它可以实现创建多线程,来利用多核CPU. 这个模块提供了四个创建子进程的函数. spawn.exec.execFile.fork. spaw ...

随机推荐

  1. Android onLoadFinished与onLoaderReset

    onLoadFinished 这个方法是在前面已创建的加载器已经完成其加载过程后被调用,这个方法保证会在应用到加载器上的数据被释放之前被调用.在此方法中,你必须删除所有对旧数据的使用(因为它将很快会被 ...

  2. js读取json,纠结。。。

    什么是json.先小抄一段:  JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.採用全然独立于语言的文本格式, 是理想的数据交换格式,同一时候,JSO ...

  3. ANDROID内存优化(大汇总——全)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  4. poj1564 Sum It Up (zoj 1711 hdu 1258) DFS

    POJhttp://poj.org/problem?id=1564 ZOJhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=711 ...

  5. Qt 使用qDebug() 打印Qlist 容器数据(将QDebug()定义成某个类的友元函数)

    当QList<T>容器中的数据用qDebug() 打印时 ,假如 T 是内置类型(int  float ...)与 打印一个字符串使用完全一样,假如T 是一个CustomerClass 那 ...

  6. FZU 1650 1752 a^b mod c

    http://acm.fzu.edu.cn/problem.php?pid=1752 http://acm.fzu.edu.cn/problem.php?pid=1650 给跪了. 我的快速幂会越界. ...

  7. [转载]Ocelot简易教程(五)之集成IdentityServer认证以及授权

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9807125.html 最近比较懒,所以隔了N天才来继续更新第五篇Ocelot简易教程,本篇教程会先简单介 ...

  8. Spring boot(二) springboot + jsp

    官方不推荐JSP在Spring Boot中使用! 一.添加依赖 在pim.xml 里面添加以下 jsp依赖 <dependency> <groupId>org.springfr ...

  9. [ES7] Await multi promises sequentially or concurrently

    Somtime 'async await' can have a bad effect on code proferemence. Let's take a look the below exampl ...

  10. libevent源码分析-介绍、安装、使用

    Libevent介绍 安装 样例 Libevent介绍 在include\event2\event.h中有关于Libevent的介绍,这里简单翻译介绍一下: Libevent是以事件为驱动的开发可扩展 ...