Node.js从基础到高级运用】二十二、同步执行的子进程

引言

在 Node.js 的应用程序中,我们有时候需要在父进程中同步地执行子进程,这对于需要顺序执行任务或者处理命令行工具的输出特别有用。child_process 模块在 Node.js 中用于创建子进程,并且提供了几种同步执行子进程的方法。在 Windows 系统中使用时,我们通常需要注意命令行语法和路径的差异。本文将介绍如何在 Windows 环境下使用 child_process 模块中的 execSyncspawnSync 函数来同步执行子进程,并提供相应的代码示例。

execSync 函数

execSync 函数用于同步执行一个命令,并返回命令的标准输出。如果命令执行过程中发生错误,则会抛出异常。

示例:使用 execSync 执行 Windows 命令

const { execSync } = require('child_process'); // 引入 child_process 模块的 execSync 函数try {// 同步执行 'dir' 命令并将输出赋值给 stdout 变量(在 Windows 中,'dir' 命令用于列出目录内容)const stdout = execSync('dir');// 输出命令执行的结果console.log(`stdout: ${stdout.toString()}`);
} catch (error) {// 如果执行过程中发生错误,打印错误信息console.error(`执行出错: ${error}`);
}

在这个示例中,execSync('dir') 同步执行了 Windows 的 dir 命令,并返回了命令的输出。我们通过 .toString() 将输出的 Buffer 转换为字符串,以便更好地阅读。

spawnSync 函数

spawnSync 函数用于同步执行一个命令,它返回一个包含 stdoutstderr 的对象。与 execSync 不同,spawnSync 适用于更复杂的场景,如需要分别处理标准输出和标准错误,或者执行需要交互的命令。

示例:使用 spawnSync 执行 Windows 命令

const { spawnSync } = require('child_process'); // 引入 child_process 模块的 spawnSync 函数// 使用 spawnSync 同步执行 'dir' 命令
const result = spawnSync('cmd.exe', ['/c', 'dir']);// 输出命令执行的标准输出
console.log(`stdout: ${result.stdout.toString()}`);
// 输出命令执行的标准错误
console.error(`stderr: ${result.stderr.toString()}`);
// 同步执行 'ping' 命令
const stdout = spawnSync('ping', ['www.baidu.com']).stdout.toString();
console.log(stdout)

在这个示例中,我们使用 spawnSync 来执行 dir 命令。注意,在 Windows 中,直接执行某些命令(比如 dir)可能需要通过 cmd.exe/c 参数来调用。这样做可以确保命令在命令提示符下执行。

execFileSync 函数

execFileSync 函数用于同步执行一个文件,并返回文件的标准输出。如果文件执行过程中发生错误,则会抛出异常。

示例:使用 execFileSync 执行 Windows 下的可执行文件

const { execFileSync } = require('child_process'); // 引入 child_process 模块的 execFileSync 函数try {// 同步执行 'ipconfig' 命令并将输出赋值给 stdout 变量(在 Windows 中,'ipconfig' 命令用于显示网络配置信息)const stdout = execFileSync('ipconfig', ['/all']);// 输出命令执行的结果console.log(`stdout: ${stdout.toString()}`);
} catch (error) {// 如果执行过程中发生错误,打印错误信息console.error(`执行出错: ${error}`);
}

在这个示例中,execFileSync('ipconfig', ['/all']) 同步执行了 Windows 的ipconfig命令,并返回了命令的输出。通过传递参数数组,我们可以指定命令行参数。

总结

在 Node.js 中同步执行子进程的方法是非常直接的,尤其是在处理需要顺序完成的任务时非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB主从复制模式基于银河麒麟V10系统

MongoDB主从复制模式基于银河麒麟V10系统 背景介绍 MongoDB自4.0版本开始已经不再建议使用传统的master/slave复制架构,而是全面采用了复制集(Replica Sets)作为标准的复制和高可用性解决方案。 复制集是MongoDB的一种数据复制和高可用性机制,通过异步同步数据至多个服务…

为什么企业推广需要品牌故事?媒介盒子分享

从时代来看,我们正处“信息超载的商业时代”,品牌传播面临着“产品同质化”和“信息超载化”的困境。近日小米SU7的出圈除了汽车本身的话题度外,离不开小米的品牌故事、创始人雷军的话题等等。今天媒介盒子就来和大家聊聊:为什么企…

postgresql发布和订阅

一、发布订阅介绍 发布和订阅使用了pg的逻辑复制的功能,通过发布端创建publication与表绑定,订阅端创建subscription同时会在发布端创建逻辑复制槽实现逻辑复制功能 逻辑复制基于 发布(Publication) 与 订阅(Subscri…

【go】模板展示不同k8s命名空间的deployment

gin模板展示k8s命名空间的资源 这里学习如何在前端单页面,调用后端接口展示k8s的资源 技术栈 后端 -> go -> gin -> gin模板前端 -> gin模板 -> html jsk8s -> k8s-go-client ,基本资源(deployment等) 环境 go 1.19k8s 1.23go m…

Idea调试热更新那些事

用惯了Eclipse,对于eclipse的调试过程中HotSwap生效感觉很爽,更换为IDEA后,总觉得别扭得很,非要手动触发“Recompile *.java"这个才能生效。最开始老是感觉我哪里理解不到位,或者我的环境配置哪里有问题,反正就是…

根据生辰八字四柱命理测算童子命童子煞算法

#小李子9479# #不讲废话# 真童子命算法口诀: 1。春秋寅子贵 //命造生在春季或秋季的(以月令算),日支或时支见寅或子的2。冬夏卯未辰 //命造生在冬季或夏季的(以月令算),日支或时支见卯、未或辰的3。金木马卯和 //年柱纳音为金或木的,日支或时支见午或卯的4。水火遇鸡…

多域名单点登录信息未同步问题

一个网站有多个域名,其中四个域名指向的是同一个页面,另外还有一个地址指向前面页面里面的某个功能。 https://www.xxx.cn/ https://xxx.cn/ https://www.xxx.com.cn/ https://xxx.com.cn/ xxx.com.cn网站下某个功能跳转到https://ab.xxx.com.cn/在ab.x…

QT6 Android设置程序图标及名称

一.APP应用图标设置 1.在工程目录中,创建一个Android_sources文件夹,在build-XXX

Centos7 安装GitLab

安装环境: 虚拟机:Centos7 最小安装 4核8G 下载GitLab 本次实验下载的是 gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm 官网截图 清华源截图 安装包下载地址(官网;下载CE版本,EE是收费版本):https://packages.gitlab.com/gitlab/gitlab-ce国内镜像源下载地址(清华源):htt…

Linux函数学习 fork

1、Linux fork 函数 pid_t fork(void); pid_t : 对于子进程,返回0 pid_t : 对于父进程进程,返回子进程进程号 int pipe(int pipefd[2]); pipefd[0] 为读取管道 pipefd[1] 为写入管道 返回值:-1失败 0 成功 2、函…

Leetcode面试经典150_Q26删除有序数组中的重复项

题目: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量…

MongoDB聚合运算符:$map

文章目录 语法举例对数组元素取整将摄氏度转为华氏度 $map聚合运算符将指定的表达式应用于数组元素&#xff0c;对数组每个元素进行计算并返回计算后的数组。 语法 { $map: { input: <expression>, as: <string>, in: <expression> } }参数说明&#xff1a…

springboot实现上传文件接口(简单版)

使用springboot实现一个最简单版本的上传文件接口 private String uploadPath "C:/imageFiles";RequestMapping(value "/upload", method RequestMethod.POST)private Result upload( RequestParam("modelName") String modelName,RequestPar…

HTML5+CSS3+JS小实例:圣诞按钮

实例:圣诞按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

【4月最新】低至50/年,4G 618/3年 云服务器价格即将回调 ,搭建网站 博客 Linux练习 比虚拟机方便 附阿里云 京东云 腾讯云对比表

更新日期&#xff1a;4月8日&#xff08;半年档 价格回调&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更…

CorelDRAW2024全网最详细独家讲解新版本新功能

各位粉丝大家好&#xff0c;为了让大家更深入的了解CorelDRAW2024新版的各项新功能&#xff0c;我们独家邀请到了Corel中国专家名师张苏老师&#xff0c;策划并录制30分钟全中文讲解栏目&#xff01;干货满满&#xff0c;全程演示&#xff0c;一览CorelDRAW2024新版的各项新功能…

Vue中使用require.context()自动引入组件和自动生成路由的方法介绍

目录 一、自动引入组件 1、语法 2、使用 2.1、在compoents文件下随便创建index.js文件 2.2、mian.js引入该js 二、自动生成路由 1、示例&#xff1a; 2、使用 2.1、在router文件下随便创建autoRouter.js文件 2.2、在router文件下index.js文件中引入autoRouter.js文件…

rabbitmq的介绍和交换机类型

rabbitmq的介绍和交换机类型 1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系…

数仓调优实战:GUC参数调优

1. 前言 适用版本&#xff1a;【8.1.1及以上】 GaussDB(DWS)性能调优系列专题文章&#xff0c;介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要&#xff0c;而在语句级调优中GUC参数可以调整估算模型&#xff0c;选择查询…

Nacos漏洞知多少?

1.什么是Nacos 1.1 官方解答 Nacos是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助…