学习node.js 二 path模块,os模块,process

news2024/9/23 21:28:09

目录

path模块

1. path.basename()

2. path.dirname

3. path.extname

4. path.join

5. path.resolve

6. path.parse path.format

OS模块

1. 获取操作系统的一些信息

(1)os.platform()

 (2)os.release

 (3)os.homedir()

   (4) os.type() 

   (5)os.arch()

2. 获取CPU的线程以及详细信息

(1)os.cpus()

 (2) os.cpus.length

3. 获取网络信息

process

api的介绍

(1)process.arch 

(2)process.cwd 

(3)process.argv

(4)process.memoryUsage

 (5)process.exit

 (6)process.kill

  (7)process.env


path模块

path模块在不同的操作系统是有差异的(windows | posix)

posix表示可移植操作系统接口,也就是定义了一套标准,遵守这套标准的操作系统有(unix,like unix,linux,macOs,windows wsl)

为什么要定义这套标准?

比如在Linux系统启动一个进程需要调用fork函数,在windows启动一个进程需要调用creatprocess函数,这样就会有问题,比如我在linux写好了代码,需要移植到windows发现函数不统一,posix标准的出现就是为了解决这个问题

Windows 并没有完全遵循 POSIX 标准。Windows 在设计上采用了不同于 POSIX 的路径表示方法。

在 Windows 系统中,路径使用反斜杠(\)作为路径分隔符。这与 POSIX 系统使用的正斜杠(/)是不同的。这是 Windows 系统的历史原因所致,早期的 Windows 操作系统采用了不同的设计选择。

1. path.basename()

返回的是给定路径中的最后一部分

console.log(path.basename("D:/node_base/testPath.js"))

结果:testPath.js

2. path.dirname

这个API和basename正好互补

path.dirname("D:/node_base/testPath.js")

结果:D:/node_base

dirname API 返回 /aaaa/bbbb/cccc 除了最后一个路径的其他路径。

basename API 返回 最后一个路径 index.html

3. path.extname

这个API 用来返回扩展名例如/bbb/ccc/file.txt 返回就是.txt

path.extname("D:/node_base/testPath.js")

返回最后一个点后面的内容

4. path.join

这个API 主要是用来拼接路径的

console.log(path.join("D:/node_base","testPath.js"))

结果:D:\node_base\testPath.js

也可以支持../ ./等操作

例:

console.log(path.join("D:/node_base/view","../","testPath.js"))

结果还是和上面的一样

5. path.resolve

用于将相对路径解析并且返回绝对路径

如果传入了多个绝对路径 它将返回最右边的绝对路径

例:

console.log(path.resolve("./index.js"))

结果:D:\item\node_base\index.js

path.resolve('/aaa','/bbb','/ccc') 返回/ccc

6. path.parse path.format

path.format 和 path.parse 正好互补

parse

用于解析文件路径。它接受一个路径字符串作为输入,并返回一个包含路径各个组成部分的对象

console.log(path.parse(__dirname + "/index.js"))

{
  root: 'D:\\',
  dir: 'D:\\item\\node_base',
  base: 'index.js',
  ext: '.js',
  name: 'index'
}
format 正好相反 在把对象转回字符串

OS模块

Nodejs os 模块可以跟操作系统进行交互

1. 获取操作系统的一些信息

(1)os.platform()

        返回标识为其编译 Node.js 二进制文件的操作系统平台的字符串。 该值在编译时设置。 可能的值为 'aix''darwin''freebsd''linux''openbsd''sunos'、以及 'win32'

实际案例:

按照不同的操作系统,执行shell命令

const os = require('os');
const {exec } = require('child_process');

const osName = os.platform();

function open(url) {
    if(osName === 'win32') {
        exec(`start ${url}`);
    } else if (osName === 'darwin') {
        exec(`open ${url}`);
    } else if (osName === 'linux') {
        exec(`xdg-open ${url}`);
    }
}
open("http://www.baidu.com")
 (2)os.release

        返回操作系统的版本例如10.xxxx win10

        如:10.0.22631

 (3)os.homedir()

        返回用户目录

        原理就是 windows echo %USERPROFILE% posix $HOME

        如:C:\Users\wanj

   (4) os.type() 

        它在 Linux 上返回 'Linux',在 macOS 上返回 'Darwin',在 Windows 上返回 'Windows_NT'

   (5)os.arch()

        返回cpu的架构 可能的值为 'arm''arm64''ia32''mips''mipsel''ppc'

'ppc64''s390''s390x'、以及 'x64'

2. 获取CPU的线程以及详细信息

(1)os.cpus()
{
    model: 'Intel(R) Core(TM) i7- CPU @ 2.20Hz',
    speed: ,
    times: {
      user: 2361078,
      nice: 0,
      sys: 1185984,
      idle: 85513343,
      irq: 12453
    }
  }

model: 表示CPU的型号信息

speed: 表示CPU的时钟速度

times: 是一个包含CPU使用时间的对象,其中包含以下属性:

  • user: 表示CPU被用户程序使用的时间(以毫秒为单位)。
  • nice: 表示CPU被优先级较低的用户程序使用的时间(以毫秒为单位)。
  • sys: 表示CPU被系统内核使用的时间(以毫秒为单位)。
  • idle: 表示CPU处于空闲状态的时间(以毫秒为单位)。
  • irq: 表示CPU被硬件中断处理程序使用的时间(以毫秒为单位)。
 (2) os.cpus.length

        可以获取到cpu的线程

3. 获取网络信息

os.networkInterfaces()

{
  lo: [
    {
      address: '127.0.0.1',
      netmask: '255.0.0.0',
      family: 'IPv4',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: '127.0.0.1/8'
    },
    {
      address: '::1',
      netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      scopeid: 0,
      internal: true,
      cidr: '::1/128'
    }
  ],
  eth0: [
    {
      address: '192.168.1.108',
      netmask: '255.255.255.0',
      family: 'IPv4',
      mac: '01:02:03:0a:0b:0c',
      internal: false,
      cidr: '192.168.1.108/24'
    },
    {
      address: 'fe80::a00:27ff:fe4e:66a1',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '01:02:03:0a:0b:0c',
      scopeid: 1,
      internal: false,
      cidr: 'fe80::a00:27ff:fe4e:66a1/64'
    }
  ]
} 
  • address: 表示本地回环接口的IP地址,这里是 '127.0.0.1'
  • netmask: 表示本地回环接口的子网掩码,这里是 '255.0.0.0'
  • family: 表示地址族(address family),这里是 'IPv4',表示IPv4地址。
  • mac: 表示本地回环接口的MAC地址,这里是 '00:00:00:00:00:00'。请注意,本地回环接口通常不涉及硬件,因此MAC地址通常为全零。
  • internal: 表示本地回环接口是否是内部接口,这里是 true,表示它是一个内部接口。
  • cidr: 表示本地回环接口的CIDR表示法,即网络地址和子网掩码的组合,这里是 '127.0.0.1/8',表示整个 127.0.0.0 网络。

process

process 是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API

api的介绍

(1)process.arch 

        和之前的os.arch一样

(2)process.cwd 

        返回当前的工作目录 例如在 F:\project\node> 执行的脚本就返回这个目录 也可以和path拼接代替__dirname使用——

        也就是和__dirname的作用是一样的,但是在esm模式下无法使用__dirname所以就会采用process.cwd代替

(3)process.argv

        这是process的一个属性

        获取执行进程后面的参数 返回是一个数组 后面到命令行交互工具的时候会很有用,各种cli脚手架也是使用这种方式接受配置参数例如webpack 
        node .\testPath.js --seva

        [ 'D:\\node\\node.exe', 'D:\\item\\node_base\\testPath.js', '--seva' ]

        第一个元素为,解析他的文件路径

        第二个元素为:调用这个属性的文件路径

        第三个元素为:执行命令后携带的参数

(4)process.memoryUsage

        用于获取当前进程的内存使用情况。该方法返回一个对象,其中包含了各种内存使用指标,如 rss(Resident Set Size,常驻集大小)、heapTotal(堆区总大小)、heapUsed(已用堆大小)和 external(外部内存使用量)等

        

{
    rss: 30932992, // 常驻集大小 这是进程当前占用的物理内存量,不包括共享内存和页面缓存。它反映了进程实际占用的物理内存大小
    heapTotal: 6438912, //堆区总大小 这是 V8 引擎为 JavaScript 对象分配的内存量。它包括了已用和未用的堆内存
    heapUsed: 5678624,  //已用堆大小
    external: 423221, //外部内存使用量 这部分内存不是由 Node.js 进程直接分配的,而是由其他 C/C++ 对象或系统分配的
    arrayBuffers: 17606 //是用于处理二进制数据的对象类型,它使用了 JavaScript 中的 ArrayBuffer 接口。这个属性显示了当前进程中 ArrayBuffers 的数量
  }
 (5)process.exit

         将强制进程尽快退出,即使仍有未完全完成的异步操作挂起

        例:

setTimeout(() => {
    console.log('Hello World')
},2000)
setTimeout(() => {
    process.exit()
},500)
process.on('exit', () => {
        console.log('Goodbye World')
})

有on方法可以去监听事件

 (6)process.kill

        与exit类似,kill用来杀死一个进程,接受一个参数进程id可以通过process.pid 获取

process.kill(process.pid, 'SIGINT')
  (7)process.env

        用于读取操作系统所有的环境变量,也可以修改和查询环境变量

        修改 注意修改并不会真正影响操作系统的变量,而是只在当前线程生效,线程结束便释放。

         

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

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

相关文章

1.1GB大更新,华为Pura70系列鸿蒙新版本优化哪些方面

华为Pura70 Pro手机迎来了其操作系统的又一次重要更新,推送了鸿蒙4.2.0.176新版本。这次升级不仅在安全性、音效和智慧多窗等方面进行了优化,还集成了2024年7月的安全补丁,为用户带来了更加安全、流畅的使用体验。 1.升级包内容丰富 华为Pur…

Python编码系列—掌握Python Web开发:Flask与FastAPI实战应用

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

Ropdump:针对二进制可执行文件的安全检测工具

关于Ropdump Ropdump是一款针对二进制可执行文件的安全检测工具,该工具基于纯Python开发,是一个命令行工具,旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。 功能介绍 1、识别二进…

win10安装docker,打包python、java然后centos执行镜像

一、win10安装Docker Desktop docker官网(需要魔法)下载:https://www.docker.com/products/docker-desktop/ 安装方法参考:https://blog.csdn.net/beautifulmemory/article/details/137970794 下载完毕后界面安装,不勾…

日拱一卒(3)——leetcode学习记录:二叉树最小深度

一、任务:平衡二叉树 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 二、思路: 1. 递归计算二叉树的深度 节点不存在,返回0…

2024新型数字政府综合解决方案(九)

新型数字政府综合解决方案通过整合人工智能、大数据、区块链与云计算技术,构建了一个智能化、透明化和高效的政务服务平台,以提升政府服务的响应速度和处理效率,增强数据的安全性和透明度;该平台实现了跨部门的数据共享与实时更新…

Zotero更改插入word中所有引用编号的颜色

002-如何批量更改Zotero插入在word中参考文献的颜色(快速变蓝) 主要根据此视频进行学习。 需要记住 查找的内容为: ^19 ADDIN ZOTERO_ITEM 在word中打开 文件->更多->选项->高级 下滑选择域底纹, 可以看到所有的引用 …

【数据结构与算法】分治法

分治法目录 一.分治法的思想二.分治法的步骤三.举个例子四.具体实现五.完整代码 一.分治法的思想 将一个大问题,拆解成为若干个小问题,而且大问题与小问题的解决方法一样. 说到这里我们可以联想到递归,没错就是用递归的思想. 分:递归解决较小的问题 治:子问题的解构建原问题的…

RTX 4070 GDDR6显存曝光:性能与成本的平衡之选

近期,关于NVIDIA RTX 4070新显卡的信息曝光,这款显卡将配备较为缓慢的GDDR6显存,而非更高性能的GDDR6X。这一配置的选择引发了业内的广泛关注,特别是在性能与成本的平衡问题上。 新版RTX 4070 OC 2X的核心特点 **1.显存类型与带…

Python | Leetcode Python题解之第341题扁平化嵌套列表迭代器

题目: 题解: class NestedIterator:def __init__(self, nestedList: [NestedInteger]):# 对于nestedList中的内容,我们需要从左往右遍历,# 但堆栈pop是从右端开始,所以我们压栈的时候需要将nestedList反转再压栈self.…

数据结构----链表

一丶概念 链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。 和顺序表不同同,使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。 二丶特点 特点:内存不连续…

《SPSS零基础入门教程》学习笔记——02.数据管理

文章目录 2.1 连续变量的离散化2.2 自动重编码、编秩与数值计数2.3 几个常用过程2.4 多个数据文件的操作2.5 数据字典2.6 数据核查(1)数据验证模块(2)数据检验 2.7 数据准备 计算新变量(转换 -> 计算变量&#xff0…

VueUse 基于 Vue 3 Composition API 的高质量 Hooks 库

VueUse 是什么? VueUse 是基于 Vue 3 Composition API 的高质量 Hooks 库。例如获取滚动的距离 VueUse 官网:VueUse | VueUse VueUse 什么使用? 1、通过npm安装 VueUse npm i @vueuse/core 2、搜索需要使用的函数,例如搜索 useScroll 滚动 3、使用useScroll 滚动函数 …

使用RKNN在Orange Pi 5 (RK3588s) 上部署推理PPO深度学习模型

文章目录 一、前言1️⃣、Orange Pi 是什么?2️⃣、PPO 是什么?3️⃣、RKNN 是什么?3️⃣、ONNX 是什么? 二、项目简介三、部署流程1️⃣、PPO 网络结构2️⃣、PPO 输出模型,模型转换,以及对比检查3️⃣、.…

httplib库:用C++11搭建轻量级HTTP服务器

目录 引言 一. httplib库概述 二. httplib核心组件 2.1 数据结构 2.2 类和函数 2.3 服务器搭建 ​编辑 结语 引言 在现代软件开发中,HTTP服务是网络应用的基础。对于需要快速搭建HTTP服务器或客户端的场景,使用成熟的第三方库可以极大提高开发效…

微软运行库全集合:一站式解决兼容性问题

开发者在部署应用程序时经常遇到因缺少运行库而引发的兼容性问题。为了解决这一问题,电脑天空推荐微软常用运行库合集,一个集成了微软多个关键运行库组件的软件包。 📚 包含组件概览: Visual Basic Virtual Machine:…

电销机器人助力企业节约成本提升业绩

电销系统机器人 的出现对企业来说不但仅是提高一点工作效率这么简单。首先从拨打电话上来看,电销系统机器人每日能够拨打几千通、上万通电话无上线,都可自行设置,并且并不会感觉到累,更不会由于被挂掉电话而影响心情,这…

KNN算法-opencv的运用

文章目录 opencv介绍与安装KNN算法中opencv的运用1.数据介绍2.图片处理3.图像切分与重组4.分配标签5.模型构建与训练6.预测结果7.模拟测试8.代码及详注 opencv介绍与安装 OpenCV(Open Source Computer Vision Library,开源计算机视觉库)是一…

ShareSDK Twitter

创建应用 1.登录Twitter控制台并通过认证 2.点击Developer Portal进入Twitter后台 3.点击Sign up for Free Account创建应用 4.配置应用信息 以下为创建过程示例,图中信息仅为示例,创建时请按照真实信息填写,否则无法正常使用。 权限申请…

智能安全守护,寺庙安全用电解决方案

在四川省蓬溪县城北,高峰山以其千年的历史沉淀和独特的文化风貌,默默诉说着道教与佛教交融的传奇。然而,2017年5月31日凌晨的一声巨响,打破了这里的宁静,一场突如其来的大火,让这座承载着无数信徒信仰与梦想…