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

  

posted @   慕尘  阅读(14498)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示