nodejs调用cmd命令
使用 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事件监听,并返回状态码,通过状态码可以知道子进程是否顺利执行