使用 child_process.exec 实现

child_process即子进程可以创建一个系统子进程并执行shell命令,在与系统层面的交互上非常有用

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

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')

使用child_process模块的步骤:

  1.调用系统命令行

  2.打开第三方软件

  3.打开第三方软件并实现通信

示例:

  调用命令行ipconfig获取系统相关IP信息

(1)使用exec

"use strict";

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

module.exports = function myTest() {

    return new Promise(function(resolve, reject) {

        var cmd = "ipconfig";
exec(cmd,{
maxBuffer: 1024 * 2000
}, function(err, stdout, stderr) {
if (err) {
console.log(err);
reject(err);
} else if (stderr.lenght > 0) {
reject(new Error(stderr.toString()));
} else {
console.log(stdout);
resolve();
}
});
});
};

(2)使用spawn

var spawn = require("child_process").spawn;
module.exports = function myTest() {
return new Promise(function(resolve, reject) {
var cmd = "ipconfig";
var result = spawn('cmd.exe', ['/s', '/c', 'ipconfig']);
result.on('close', function(code) {
console.log('child process exited with code :' + code);
});
result.stdout.on('data', function(data) {
console.log('stdout: ' + data);
});
result.stderr.on('data', function(data) {
console.log('stderr: ' + data);
reject(new Error(stderr.toString()));
});
resolve(); });
};

说明:

  exec是在执行完成后返回一个完整的buffer,通过返回的buffer去识别完成状态

  spawn在执行时会返回一个stdout和stderr流对象,为边执行边返回。在执行完成后会抛出close事件监听,并返回状态码,通过状态码可以知道子进程是否顺利执行

  

nodejs调用cmd命令的更多相关文章

  1. 使用node自动生成html并调用cmd命令提交代码到仓库

    生成html提交到git仓库 基于目前的express博客,写了一点代码,通过request模块来请求站点,将html保存到coding-pages目录,复制静态文件夹到coding-pages,最后 ...

  2. python调用cmd显示中文乱码及调用cmd命令

    os.system('dir') 解决方法加上 os.system('chcp 65001') ____________________________________________________ ...

  3. C语言调用Cmd命令以及执行系统软件

    C语言调用Cmd命令以及执行系统软件 http://blog.csdn.net/qq_16814591/article/details/43676377

  4. IE浏览器中使用js调用cmd命令行demo

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  5. Python调用cmd命令

    常用的两种方式: 1.python的OS模块. OS模块调用CMD命令有两种方式:os.popen(),os.system(). 都是用当前进程来调用. os.system是无法获取返回值的.当运行结 ...

  6. 使用Nodejs在Windows上调用CMD命令

    要用nodejs执行cmd,需要引入一个包node-cmd npm install node-cmd var cmd=require('node-cmd'); cmd.get( 'notepad',/ ...

  7. C# 调用cmd命令行路径中带空格问题

    今天打包winform程序,程序中本身有一处需要调用cmd.exe,打包安装在C:\Program Files目录下,然后调用cmd的地方,就弹出了C:\Program不是内部或外部命令,也不是可运行 ...

  8. Java调用CMD命令

    java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...

  9. Java调用cmd命令 打开一个站点

    使用Java程序打开一个站点 近期做了个东西使用SWT技术在一个client程序 须要升级时在提示升级 点击窗口上的一个连接 打开下载网页 花费了我非常长时间 用到了把它记录下来  怕是忘记,须要时能 ...

随机推荐

  1. express捕获全局异常的三种方法

    场景 express的路由里抛出异常后,全局中间件没办法捕获,需要在所有的路由函数里写try catch,这坑爹的逻辑让人每次都要多写n行代码 官方错误捕获中件间代码如下 app.use(functi ...

  2. 2018-8-10-win10-uwp-拖动控件

    原文:2018-8-10-win10-uwp-拖动控件 title author date CreateTime categories win10 uwp 拖动控件 lindexi 2018-08-1 ...

  3. webpack4 打包静态资源

    demo 代码点此,开始之前,先做点准备工作. 准备工作 准备一个空文件夹,然后执行下列命令: npm init -y npm i -D webpack webpack-cli 然后创建一个 dist ...

  4. 章节十四、2-自动完成功能-Autocomplete

    一.什么是自动匹配功能? 很多网站都有自动匹配功能,列如你在使用天猫搜索商品时,输入“鞋”,输入框的下面会出现很多与“鞋”有关的选项. 二.以https://www.expedia.com/网站的城市 ...

  5. bootstrap的表单form

    (1)默认表单 <form> <div class="form-group"> <label class="control-label&qu ...

  6. 【Mysql】初识MySQL

    一. MySQL是客户端/服务器架构1)macOS操作系统上的默认安装目录:/usr/local/mysql/  在MySQL的安装目录下有一个bin目录,这个目录下存放着许多可执行文件.2)将该bi ...

  7. [TCP/IP] SSL的通讯原理

    SSL:位于传输层和应用层之间,专门实现在传输之前加密,在接收端给应用层之前解密;使用非对称加密技术 SSL原理 1.客户端与服务端建立连接 2.互相Hello(包含支持的版本.算法:加上随机数) 3 ...

  8. Linux 多线程应用中如何编写安全的信号处理函数【转】

    转自:https://www.cnblogs.com/virusolf/p/4945642.html http://blog.163.com/he_junwei/blog/static/1979376 ...

  9. ubuntu 16.04 实现远程图形界面连接

    一.在操作系统中用管理员权限安装以下软件 1. 安装xrdp: sudo apt-get install xrdp 2. 安装vnc4server: sudo apt-get install vnc4 ...

  10. 04.UTXO:未使用的交易输出,比特币核心概念之一

    在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...