利用NodeJS的子进程(child_process)调用系统命令的方法分享


Posted in NodeJs onJune 05, 2013

NodeJS子进程简介 NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入、标准输出及标准错误输出的接口。

NodeJS子进程简介

NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:

标准输入、标准输出及标准错误输出的接口
child.stdin 获取标准输入
child.stdout 获取标准输出
child.stderr 获取标准错误输出
获取子进程的PID:child.pid
提供生成子进程的重要方法:child_process.spawn(cmd, args=[], [options])
提供直接执行系统命令的重要方法:child_process.exec(cmd, [options], callback)
提供杀死进程的方法:child.kill(signal='SIGTERM')

实例一:利用子进程获取系统内存使用情况

将以下代码保存为 free.js:

var spawn = require('child_process').spawn, 
free = spawn('free', ['-m']); // 捕获标准输出并将其打印到控制台 
free.stdout.on('data', function (data) { 
console.log('标准输出:\n' + data); 
}); 
// 捕获标准错误输出并将其打印到控制台 
free.stderr.on('data', function (data) { 
console.log('标准错误输出:\n' + data); 
}); 
// 注册子进程关闭事件 
free.on('exit', function (code, signal) { 
console.log('子进程已退出,代码:' + code); 
});

执行代码后的结果:

$ node free.js
标准输出:
total used free shared buffers cached
Mem: 3949 1974 1974 0 135 959
-/+ buffers/cache: 879 3070
Swap: 3905 0 3905

子进程已退出,代码:0
以上输出相当与在命令行执行:free -m 命令。

通过这个简单的例子我们已经对子进程的使用有所了解,下面再来一个示例,用于演示exec 的使用方法。

实例二:利用子进程统计系统登录次数

将下面代码保存为 last.js

var exec = require('child_process').exec, 
last = exec('last | wc -l'); last.stdout.on('data', function (data) { 
console.log('标准输出:' + data); 
}); 
last.on('exit', function (code) { 
console.log('子进程已关闭,代码:' + code); 
});

执行代码:

$ node last.js
标准输出:203

子进程已关闭,代码:0
其与直接在命令行输入:last | wc -l 的结果是一样的。

NodeJs 相关文章推荐
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
将nodejs打包工具整合到鼠标右键的方法
May 11 #NodeJs
用nodejs写的一个简单项目打包工具
May 11 #NodeJs
nodejs教程 安装express及配置app.js文件的详细步骤
May 11 #NodeJs
nodejs中exports与module.exports的区别详细介绍
Jan 14 #NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 #NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 #NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 #NodeJs
You might like
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
js实现聊天对话框
2020/02/08 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python使用递归的方式建立二叉树
2019/07/03 Python
pytorch forward两个参数实例
2020/01/17 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
编程输出如下图形
2013/11/24 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
应届生护士求职信
2013/11/01 职场文书
四年大学自我鉴定
2014/02/17 职场文书
入党自荐书范文
2014/03/09 职场文书
调解协议书
2014/04/16 职场文书
体育口号大全
2014/06/18 职场文书
学期个人工作总结
2015/02/13 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python