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

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 的结果是一样的。

(0)

相关推荐

  • 详解从Node.js的child_process模块来学习父子进程之间的通信

    child_process模块提供了和popen(3)一样的方式来产生自进程,这个功能主要是通过child_process.spawn函数来提供的: const spawn = require('child_process').spawn; const ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data'

  • nodejs 子进程正确的打开方式

    因为库太拙了,需要在 nodejs 里调用子进程来获取数据.然而看到 child_process 的文档真是头疼,这么多种启动子进程的方法直接推到人面前,也没个解释,命名也十分无用.只能一个个地查看详细说明来找到应该使用的那个--所以我整理了一下. 首先是同步创建子进程的那几个函数.会阻塞 nodejs 的主循环.无用.(要是写小脚本的话我直接上 shell 或者 Python 了,干嘛跟自己过不去呢.) exec :调用 shell 来执行命令的.这部分跟「exec」这个词的 UNIX/C 语

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

    NodeJS子进程简介 NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入.标准输出及标准错误输出的接口. NodeJS子进程简介 NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 标准输入.标准输出及标准错误输出的接口 child.stdin 获取标准输入 child.stdout 获取标准输出 child.stderr 获取标准错误输出 获取子进程的PID:child.pid 提供生成子进程的重要方法:child_process.spawn(cmd,

  • Node.js中安全调用系统命令的方法(避免注入安全漏洞)

    在这篇文章中,我们将学习正确使用Node.js调用系统命令的方法,以避免常见的命令行注入漏洞. 我们经常使用的调用命令的方法是最简单的child_process.exec.它有很一个简单的使用模式;通过传入一段字符串命令,并把一个错误或命令处理结果回传至回调函数中. 这里是你通过child_process.exec调用系统命令一个非常典型的例子. 复制代码 代码如下: child_process.exec('ls', function (err, data) {     console.log(

  • 利用nodeJs anywhere搭建本地服务器环境的方法

    公司有个微信端项目,需要前端在手机上随时查看网页,于是乎用Node搭建了一个本地服务器环境,把网页地址发到QQ并用手机打开来查看. 首先去nodeJs官网下载最新版nodeJs https://nodejs.org/en/ 安装成功后win+r打开cmd 输入node -help 或者node -v查看是否安装成功 装好后输入 npm install anywhere -g来安装anywhere.注意如果是mac系统会提示你权限不够,需要在代码前加上 sudo获取管理员权限.即sudo npm

  • Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child_process.html,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入.标准输出及标准错误输出的接口. NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 标准输入.标准输出及标准错误输出的接口 child.stdin 获取标准输入 child.

  • C语言利用system调用系统命令行详情

    system,顾名思义,就是调用系统命令行,输入为字符串,然后把这个字符串输出给命令行,让命令行执行. 为了测试其特性,可以做一个小程序: //system.c #include<stdlib.h> #include<stdio.h> #include<string.h> int main(){     char cmd[100];     while(1){         printf("input code: ");         gets(

  • NodeJS父进程与子进程资源共享原理与实现方法

    本文实例讲述了NodeJS父进程与子进程资源共享原理与实现方法.分享给大家供大家参考,具体如下: 实验目标:实现父进程与子进程间资源共享 使用模块:cluster 简介:建立node集群,实现多进程,利用child_process来实现IPC,解决多核利用率,提高性能. 原理: 1 Master-worker主从模式的多进程架构 2 fork()复制进程,充分利用cpu资源(根据内核数决定) 3 每个进程都有自己的区域,如果在各自区域内执行操作,资源并未共享.通过监听message事件和send

  • 详解如何利用Nodejs构建多进程应用

    目录 前言 进程的创建和使用 多核利用率 创建子进程 进程间通信 IPC 总结 前言 JavaScript 主线程运行在单个进程的单个线程上.这样做的好处是: 程序状态是单一的,在没有多线程的情况下没有锁.线程同步问题, 操作系统在调度时因为较少上下文的切换,可以很好地提高CPU的使用率. 但是单进程单线程并非完美的结构,一旦线程中某段代码发生异常阻塞,会阻塞代码执行而浪费资源.同时,如今CPU基本均是多核的,服务器往往还有多个CPU. 因此 Nodejs 不可避免的面临两个问题:如何充分利用多

  • Python调用系统命令os.system()和os.popen()的实现

    作为一门脚本语言,写脚本时执行系统命令可以说很常见了,python提供了相关的模块和方法. os模块提供了访问操作系统服务的功能,由于涉及到操作系统,它包含的内容比较多,这里只说system和popen方法. >>> import os >>> dir(os) ['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RAND

  • 详解Python调用系统命令的六种方法

    作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system().os.popen().subprocess.popen().subprocess.call().subprocess.run().subprocess.getstatusoutput()六种方法. os.system() system函数可以将字符串转化成命令在服务器上运行:其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程.

  • 如何利用nodejs自动定时发送邮件提醒(超实用)

    需要先安装插件 npm install Nodemailer --save index.js global.SG = { nodemailer: require("nodemailer")//发送邮件需要的服务 }; sg.js //发送邮件参数:收件人(支持群发).主题.正文(支持html格式)---------------------------------------- sendMail(to, subject, html) { //下面这几个改成你自己的邮箱.昵称和授权码 co

随机推荐