nodejs 子进程正确的打开方式
因为库太拙了,需要在 nodejs 里调用子进程来获取数据。然而看到 child_process 的文档真是头疼,这么多种启动子进程的方法直接推到人面前,也没个解释,命名也十分无用。只能一个个地查看详细说明来找到应该使用的那个……所以我整理了一下。
首先是同步创建子进程的那几个函数。会阻塞 nodejs 的主循环。无用。(要是写小脚本的话我直接上 shell 或者 Python 了,干嘛跟自己过不去呢。)
exec :调用 shell 来执行命令的。这部分跟「exec」这个词的 UNIX/C 语义刚好相反。
execFile :不调用 shell,直接执行命令。这命名不明所以。
fork :执行一个 新的 nodejs 进程,并且建立一个专用的 IPC 通道。子进程除了 IPC 通道外与父进程无任何瓜葛!命名真是一如既往地误人子弟。默认使用与父进程相同的可执行文件(nodejs 版本),也可以另外指定。
spawn :相当于 Python 的 subprocess,可以指定是否使用 shell。默认不使用 shell。也支持 cwd 啊 env 啊 argv0 啊之类的参数。
结论:如果需要用 Python 的 subprocess.run / Popen 类似的功能,就使用 child_process.spawn 。 exec 开头的那个函数似乎没啥大用,大概跟 subprocess 的 getoutput / check_call 之类的一样只是有一些预设而已吧。
相关推荐
-
详解从Node.js的child_process模块来学习父子进程之间的通信
child_process模块提供了和popen(3)一样的方式来产生自进程,这个功能主要是通过child_process.spawn函数来提供的: const spawn = require('child_process').spawn; const ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data'
-
利用NodeJS的子进程(child_process)调用系统命令的方法分享
NodeJS子进程简介 NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入.标准输出及标准错误输出的接口. NodeJS子进程简介 NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 标准输入.标准输出及标准错误输出的接口 child.stdin 获取标准输入 child.stdout 获取标准输出 child.stderr 获取标准错误输出 获取子进程的PID:child.pid 提供生成子进程的重要方法:child_process.spawn(cmd,
-
nodejs 子进程正确的打开方式
因为库太拙了,需要在 nodejs 里调用子进程来获取数据.然而看到 child_process 的文档真是头疼,这么多种启动子进程的方法直接推到人面前,也没个解释,命名也十分无用.只能一个个地查看详细说明来找到应该使用的那个--所以我整理了一下. 首先是同步创建子进程的那几个函数.会阻塞 nodejs 的主循环.无用.(要是写小脚本的话我直接上 shell 或者 Python 了,干嘛跟自己过不去呢.) exec :调用 shell 来执行命令的.这部分跟「exec」这个词的 UNIX/C 语
-
OpenStack Tempest的正确的打开方式
OpenStack云平台由一系列不同的服务和组件组成.但其中的Tempest是如何帮助我们测试工作是否正常运行呢? OpenStack Tempest是一个工具,允许用户和开发人员测试开源云平台. 由于OpenStack测试涉及多个组件,因此该工具提供了三种不同的模型:API测试.场景测试和单元测试:每种模型都有自己的一套规则和指南. API测试主要面向开发人员,旨在测试OpenStack API功能.场景测度用于测试OpenStack中的复杂"通过路径",确保平台的不同组件被集成和协
-
基于python的多进程共享变量正确打开方式
多进程共享变量和获得结果 由于工程需求,要使用多线程来跑一个程序.但是因为听说python的多线程是假的,于是使用多进程,反正任务需要共享的参数少. 查阅资料,发现实现多进程主要使用Multiprocessing,有两种方式,一种是Process,另一种是Pool. p = Process(target=fun,args=(args)) 再通过p.start()来启动一个子进程,通过p.join()方法来使得子进程运行结束后再执行父进程. 但是这样很烦,还要写个for 循环来开n个线程和join
-
vue-cli + sass 的正确打开方式图文详解
关于在vue-cli搭建的项目中怎么配置sass,网上搜到的基本是这种答案: 但是我认为,直接将样式写在每个单文件的<style>里,是十分不明智的做法.且不说node-sass安装过程的各种坑,内嵌的<style>也让组件显得十分混乱.想象一下你在修改某个methods时必须拖动滚轮穿越几十上百行的css代码,又或者为了修改一组样式,却找不到对应的css文件,因为它们散布在vue文件里... 在我看来,正确的做法应该是单独管理sass文件,然后在main.js中直接引入编译好的c
-
基于Python log 的正确打开方式
保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import smtplib LOG_DIR = os.path.join('log') if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) def get_logger(name='test', file_log=False): logbook.set_date
-
云开发 VSCode 插件 Cloudbase Toolkit 的正确打开方式及应用场景分析
什么是 Cloudbase Toolkit Tencent CloudBase Toolkit 是云开发的 VS Code(Visual Studio Code)插件.该插件可以让您更好地在本地进行云开发项目开发和代码调试,并且轻松将项目部署到云端. Cloudbase Toolkit 将项目创建.函数上传.函数更新.函数本地调试等功能集成在 VSCode 的本地调试环境中,开发者可以通过简单的点击,完成云函数的更新.上传.同步等功能. 和 Cloudbase Cli 相比,Cloudbase
-
python中四舍五入的正确打开方式
round()函数 (注意:下面的我也不清楚是否正确,我只是发表一下我的观点) 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可 强烈建议不要去深究,就直接得结果就好 ndigiths可以为正数,也可以为负数,还可以为0,可以为空 n:就是精确到第n位小数,对整数没有影响,1为精确到十分位(注意:小数就是从十分位往后推的) -n:就是精确到整数位,-1为精确到十位,然后就是百位千位-有小数位就全舍掉,不管多大,但会保留一个为0的小数位 0:精确到个位,但会保留
-
Spring原生Rpc六种的正确打开方式实现示例
目录 前言 什么是Rpc? Spring中的Rpc 定义服务接口 调用服务代码 WEBSERVICE的RPC实现 服务提供者 服务实现 服务暴露 服务消费者 HTTP的RPC实现 服务提供者 服务实现 服务暴露 服务消费者 文末结语 前言 在java生态圈谈到Rpc,很多人可能就会想到Dubbo.Motan.Grpc等框架.但是你知道吗?作为Java编程全家桶的Spring已经内置了多种RPC的实现方式,可以直接使用.存在即合理,有些场景下其实并不需要Dubbo,Grpc等重量级的RPC组件,那
-
TypeScript中extends的正确打开方式详解
目录 前言 extends第一式:继承 类继承类 接口继承接口 接口继承类 extends第二式:三元表达式条件判断 普通的三元表达式条件判断 情况一:Type1和Type2为同一种类型. 情况二:Type1是Type2的子类型. 情况三: Type2类型兼容类型Type1. 带有泛型的三元表达式条件判断 extends第三式:泛型约束 前言 最近完整地看了一遍TypeScript的官方文档,发现文档中有一些知识点没有专门讲解到,或者是讲解了但却十分难以理解,因此就有了这一系列的文章,我将对没有
-
pycharm修改文件的默认打开方式的步骤
有时我们用pycharm打开某个文件的时候,默认的打开方式是不正确的,那么如何设置呢?下面小编给大家分享一下. 首先我们点击File菜单,然后选择Setting,如下图所示 接着找到Editor下面的File Types,如下图所示 然后选择一个文件类型,就可以看到它下面关联的文件后缀了,如下图所示 接着我们只需要把要改的文件后缀选择移除掉 然后在选择一个新的文件类型,将后缀添加进去 最后直接输入后缀名就可以了,如下图所示 综上所述,pycharm修改文件的默认打开方式就在settings下面的
随机推荐
- 数据结构之矩阵行列和相等的实例
- python中global与nonlocal比较
- iOS App设计模式开发中对interpreter解释器模式的运用
- javascript cookie操作类的实现代码小结附使用方法
- php下防止单引号,双引号在接受页面转义的设置方法
- 使用ThinkPHP生成缩略图及显示
- Android基于ListView实现类似Market分页加载效果示例
- 自定义容器和字体大小
- JSP过滤器Filter配置过滤类型全部汇总
- 用Javscript实现表单复选框的全选功能
- 查看linux中某个端口(port)是否被占用的方法
- PHP使用curl制作简易百度搜索
- Javascript图像处理—平滑处理实现原理
- template.js前端模板引擎使用详解
- JavaScript参数个数可变的函数举例说明
- 浅析JavaScript访问对象属性和方法及区别
- 深入解析C语言中常数的数据类型
- Android编程实现改变控件背景及形态的方法
- C# Winform窗口之间传值的多种方法浅析
- 实例详解用户输入 i. 检测常用手势