原文发表在我的博客 Node.js 执行系统命令 | 以太空间

  我们在使用Node.js的时候总有一些时候需要执行一些系统命令,与系统做一些交互,或者调用其他语言,这个时候该怎么做呢?   当然是使用child_process模块了,这个模块翻译过来就是子进程,当然正如其名,这个模块主要是通过产生子进程来发挥作用,下面我们就用实例来看一下。

一、execexecSync

  这是child_process模块里面最简单的函数,作用就是执行一个固定的系统命令

const { exec } = require('child_process');
// 输出当前目录(不一定是代码所在的目录)下的文件和文件夹
exec('ls -l', (err, stdout, stderr) => {if(err) {console.log(err);return;}console.log(`stdout: ${stdout}`);console.log(`stderr: ${stderr}`);
})
复制代码

  exec函数第一个参数是要执行的命令,的第二个函数是配置选项,第三个参数是回调函数,第二个参数中一个比较常用的就是子进程的工作目录

const { exec } = require('child_process');
const path = require('path'):
// 在当前目录下的scripts文件夹里执行hexo g命令
exec('hexo g', { cwd: path.join(process.cwd(), 'scripts') }, (err, stdout, stderr) => {if(err) {console.log(err);return;}console.log(`stdout: ${stdout}`);
});
复制代码

  execSyncexec的同步版本,不过无论是execSync还是exec,得到的结果都是字符串或者Buffer对象,一般需要进一步处理。

请参考:exec具体配置,execSync具体配置

二、execFileexecFileSync

  这两个函数的作用是执行一个可执行文件,看下面的实例:

const { execFile, execFileSync } = require('child_process');execFile('example.py', [], (err, stdout, stderr) => {if(err) {console.log(err);return;}console.log(`stdout: ${stdout}`);
});const stdout = execFileSync('node', ['-v']);
console.log(stdout);
复制代码

  跟exec类似,第一个参数是要执行的文件路径,第二个是参数数组,第三个是配置,第四个是回调函数,当然,除了第一个之外都是可以省略的

注意:被执行的文件一定要有可执行权限,如果是类似.py类的特定语言的脚本,一定在开头指定解释器程序路径

请参考:execFile配置,execFileSync配置

三、spawnspawnSync

  child_process模块中所有函数都是基于spawnspawnSync函数的来实现的,换句话来说,spawnspawnSync函数的配置是最完全的,其它函数都是对其做了封装和修改。下面我们来重点讲解一下:   spawn函数原型是这样的:child_process.spawn(command[, args][, options])

  它使用指定的命令行参数创建新进程,spawn 会返回一个带有stdout和stderr流的对象。你可以通过stdout流来读取子进程返回给Node.js的数据。stdout拥有'data','end'以及一般流所具有的事件。当你想要子进程返回大量数据给Node时,比如说图像处理,读取二进制数据等等,你最好使用spawn方法

const {spawn}  = require('child_process');
const fs = require('fs');
const spawnObj = spawn('ping', ['127.0.0.1'], {encoding: 'utf-8'});
spawnObj.stdout.on('data', function(chunk) {console.log(chunk.toString());
});
spawnObj.stderr.on('data', (data) => {console.log(data);
});
spawnObj.on('close', function(code) {console.log('close code : ' + code);
})
spawnObj.on('exit', (code) => {console.log('exit code : ' + code);fs.close(fd, function(err) {if(err) {console.error(err);}});
});
复制代码

Node.js执行系统命令相关推荐

  1. Node.js 执行webpack命令出现的错误

    安装 npm install webpack-cli -g 全局安装 webpack-cli 模块 安装 npm install webpack --save-dev 项目中安装以上两个模块后使用 w ...

  2. node.js 执行php,node.js - 如何利用php执行nodejs文件

    如何利用php 的exec执行nodejs文件? 如下执行却执行失败 public function execTask ($dirPath) { $serverPath = self::$server ...

  3. nodejs 运行linux命令,node.js执行shell命令

    史上最详细的iOS之事件的传递和响应机制 前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view.寻找最合适的view的底层实现.拦截事 ...

  4. node.js mysql防注入_避免Node.js中的命令行注入安全漏洞

    在这篇文章中,我们将学习正确使用Node.js调用系统命令的方法,以避免常见的命令行注入漏洞. 我们经常使用的调用命令的方法是最简单的child_process.exec.它有很一个简单的使用模式;通 ...

  5. 关于node.js的误会

    昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受,以为node.js很小众,出乎我意料很多人感兴趣,并且对博客中的细节问题做了评论,最多的是围绕node.js的异步与单线程展开的, ...

  6. Linux事件循环阻塞,深入浅析Node.js 事件循环、定时器和process.nextTick()

    什么是事件循环 尽管JavaScript是单线程的,但通过尽可能将操作放到系统内核执行,事件循环允许Node.js执行非阻塞I/O操作. 由于现代大多数内核都是多线程的,因此它们可以处理在后台执行的多 ...

  7. Node.js的3m安装法

    原文地址:https://cnodejs.org/topic/57f628098489e7ca69f4e839 安装Node.js Node.js是支持多个平台,Mac.Linux以及Windows, ...

  8. 6分钟看懂 Node.js 武功精髓

    本篇来自[北妈的小北鼻]写手联盟 小北鼻作者:闹闹 阅读大约需要6分钟 1 为什么要学习Node.js? Node.js是目前非常火热的技术,可是作为一个前端开发人员,为什么要学Node.js? 说N ...

  9. Node.js知识梳理之Node.js安装

    Node.js官网:nodejs.org/en/ 用户进入官网,会自动推荐适合于开发者电脑的Node.js版本,官网提示我下载适用于windows(x64)的版本.官网有两个版本LTS(长期稳定)版和 ...

最新文章

  1. Python-字符串操作方法 [转]
  2. HTML5 文件域+FileReader 读取文件并上传到服务器(三)
  3. Thinkphp怎样修改模板标签定界符
  4. 结对第2次作业——WordCount进阶需求
  5. ERROR 1 (HY000): Can‘t create/write to file ‘/var/www/11.txt‘ (Errcode: 13)报错解决方案
  6. 关于 SAP UI5 系统测试工具 UIVeri5 的 Chromedriver 版本问题
  7. Linux 命令之 lsusb -- 显示本机的USB设备列表信息
  8. 两层卷积网络实现手写字母的识别(基于tensorflow)
  9. llvm安装方式_安装 LLVM 和 Clang
  10. Java开发人员常用网站收录
  11. 中国的房产市场和房产取向
  12. GENTLE.NET快速上手
  13. pl/sql 存储过程实例
  14. 革命炉石传说,Gods Unchained
  15. Android手机 通过NFC读取二代证
  16. Linux awk 命令详解
  17. Android SQLite加密
  18. 再见迅雷!推荐一个绿色无广告的开源下载工具
  19. 淘宝,天猫,1688,微店,京东,苏宁,淘特,小红书等30多个平台一键复制商品到拼多多平台(批量上传宝贝详情接口教程)
  20. IT项目管理 第八章 习题

热门文章

  1. 计算机行业常见英语,计算机行业常用英语词汇
  2. android 强制全屏,[Android]设置Activity为全屏显示的两种方法
  3. 活动目录从入门到精通
  4. SQL语句来查询今天、昨天、7天内、30天的数据,经典!
  5. 继承extends、super、this、方法重写overiding、final、代码块_DAY08
  6. swift 导出测试包(Save for Ad Hoc Deployment)卡在compile bitcode处问题
  7. 【bzoj3289】 Mato的文件管理
  8. Linux产生随机数的几种常见方法
  9. SAP NetWeaver平台介绍
  10. Modelsim仿真流程