python内置库os与sys的区别是什么?分别能实现什么功能?

Python 的 ossys 是两个功能截然不同但都非常重要的内置库,它们分别服务于不同的交互场景:前者专注于与操作系统交互,后者专注于与 Python 解释器本身交互。以下是详细解析:

一、os 库:操作系统交互接口

os 库(Operating System 的缩写)是 Python 与操作系统交互的核心接口,提供了访问操作系统底层功能的方法,涵盖文件操作、进程管理、环境变量等与操作系统相关的功能。

核心功能分类
  1. 文件与目录操作
    提供创建、删除、重命名、移动文件/目录的能力,以及路径处理等功能。

    • os.mkdir(path):创建单个目录
    • os.makedirs(path):递归创建多级目录
    • os.remove(path):删除文件
    • os.rmdir(path):删除空目录
    • os.rename(old, new):重命名文件/目录
    • os.listdir(path):列出目录下的所有文件和子目录
    • os.getcwd():获取当前工作目录
    • os.chdir(path):切换当前工作目录

    示例:

    import os
    os.makedirs("data/logs", exist_ok=True)  # 递归创建目录(若已存在则不报错)
    print(os.listdir("data"))  # 列出 data 目录下的内容
    
  2. 路径处理(os.path 子模块)
    专门处理不同操作系统的路径格式(如 Windows 的 \ 和 Linux 的 /),提供跨平台兼容性。

    • os.path.join(path1, path2):拼接路径(自动适配操作系统格式)
    • os.path.abspath(path):判断路径是否存在
    • os.path.isfile(path) / os.path.isdir(path):判断是否为文件/目录
    • os.path.abspath(path):获取绝对路径

    示例:

    import os.path
    full_path = os.path.join("data", "file.txt")  # 跨平台路径拼接
    print(os.path.abspath(full_path))  # 输出绝对路径(如 /home/user/data/file.txt)
    
  3. 环境变量操作
    读取和修改系统环境变量。

    • os.environ:获取所有环境变量(字典形式)
    • os.environ.get(key):获取指定环境变量的值
    • os.environ[key] = value:设置环境变量(仅在当前进程有效)

    示例:

    print(os.environ.get("PATH"))  # 打印系统 PATH 环境变量
    os.environ["TEMP_DIR"] = "./temp"  # 设置临时环境变量
    
  4. 系统命令与进程管理
    执行系统命令或管理进程。

    • os.system(command):执行系统命令(返回退出状态码)
    • os.popen(command):执行命令并获取输出流
    • os.getpid():获取当前进程 ID
    • os.kill(pid, signal):向指定进程发送信号(如终止进程)

    示例:

    os.system("ls -l")  # 在 Linux 中列出当前目录详情
    print("当前进程 ID:", os.getpid())
    

在这里插入图片描述

二、sys 库:Python 解释器交互接口

sys 库(System 的缩写)用于与 Python 解释器本身交互,提供对解释器配置、运行状态、命令行参数等的控制能力。

核心功能分类
  1. 命令行参数处理
    获取运行 Python 脚本时传入的命令行参数。

    • sys.argv:一个列表,其中 sys.argv[0] 是脚本文件名,sys.argv[1:] 是传入的参数

    示例:
    若执行 python script.py 100 hello,则:

    import sys
    print(sys.argv)  # 输出:['script.py', '100', 'hello']
    
  2. 解释器配置与限制
    调整 Python 解释器的运行参数和限制。

    • sys.setrecursionlimit(limit):设置递归深度上限
    • sys.getsizeof(obj):获取对象占用的内存大小(字节)
    • sys.version:获取 Python 解释器版本信息

    示例:

    import sys
    sys.setrecursionlimit(10000)  # 提高递归深度限制
    print("Python 版本:", sys.version)
    
  3. 标准输入/输出控制
    控制解释器的默认输入输出流。

    • sys.stdin:标准输入流(可用于读取用户输入)
    • sys.stdout:标准输出流(默认打印目标)
    • sys.stderr:标准错误流(用于输出错误信息)

    示例:

    import sys
    sys.stdout.write("这是标准输出\n")  # 等效于 print()
    sys.stderr.write("这是错误信息\n")   # 通常显示为红色(终端中)
    
  4. 模块搜索路径
    管理 Python 解释器查找模块的路径列表。

    • sys.path:一个列表,包含解释器搜索模块的路径
    • 可通过 sys.path.append(path) 添加自定义模块路径

    示例:

    import sys
    sys.path.append("/home/user/custom_modules")  # 添加自定义模块路径
    print("模块搜索路径:", sys.path)
    
  5. 程序退出控制
    控制程序的退出状态。

    • sys.exit(status):终止程序运行,status=0 表示正常退出,非 0 表示异常退出

    示例:

    import sys
    if len(sys.argv) < 2:sys.exit(1)  # 若未传入参数,异常退出(状态码 1)
    

三、核心区别总结

对比维度ossys
核心目标与操作系统交互(文件、进程等)与 Python 解释器交互(配置、参数等)
操作对象操作系统资源(文件系统、环境变量等)解释器本身(命令行参数、运行状态等)
典型应用场景创建文件、执行系统命令、处理路径解析命令行参数、调整解释器限制、控制退出
跨平台性封装了不同系统的差异(如路径分隔符)与解释器相关,跨平台性由解释器保证

在这里插入图片描述

四、实际应用中的配合

ossys 常结合使用,例如:

  • sys.argv 获取命令行传入的文件路径,再用 os.path 处理路径,最后用 os 操作文件。
  • sys.exit() 根据 os 操作的结果(如文件是否存在)决定程序是否正常退出。

理解两者的定位和功能,能更高效地处理与系统交互和解释器控制相关的任务。

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

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

相关文章

【云计算】云主机的亲和性策略(一):快乐旅行团

《云主机的亲和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 云主机的亲和性策略&#xff08;一&#xff09;&#xff1a;快乐旅行团2️⃣ 云主机的亲和性策略&#xff08;二&#xff09;&#xff1a;集群节点组3️⃣ 云主机的亲和性策略&#xff08;三&#xf…

USRP捕获手机/路由器数据传输信号波形(下)

目录&#xff1a; USRP捕获手机/路由器数据传输信号波形&#xff08;上&#xff09; USRP捕获手机/路由器数据传输信号波形&#xff08;中&#xff09; USRP捕获手机/路由器数据传输信号波形&#xff08;下&#xff09; 四、路由器MIMO-OFDM系统 本文深入分析采集手机与路由…

位运算在权限授权中的应用及Vue3实践

在现代前端应用中&#xff0c;权限管理是一个至关重要的功能模块。随着应用复杂度的提示功能&#xff0c;权限细粒度越来越精细&#xff0c;如何高效地管理和判断权限成为前端开发的一大挑战。位运算作为一种高效的运算方式&#xff0c;在权限管理领域有着独特的优势。本文将详…

面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答

Java JDK 17 新特性面试回答指南 作为一名Java开发者&#xff0c;了解JDK 17的新特性是面试中的关键点。JDK 17&#xff08;Java SE 17&#xff09;于2021年9月发布&#xff0c;是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;引入了多项改进以提升开发效率、安全性…

【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单

基本概念SQL注入是OWASP Top 10安全风险之一&#xff0c;它利用了应用程序对用户输入数据的不当处理。当应用程序直接将用户输入拼接到SQL查询中而没有进行适当的过滤或转义时&#xff0c;就可能发生SQL注入攻击。攻击原理假设有一个登录表单的SQL查询&#xff1a;SELECT * FRO…

pyqt5显示任务栏菜单并隐藏主窗口,环境pyqt5+vscode

环境 pyqt5vscode 环境搭建见 https://blog.csdn.net/huiaifen/article/details/125175261 新建一个QMainWindow 1 在VSCode的资源管理器中&#xff0c;右键选择 PYQT:New Form&#xff0c;打开Qt Designer2 在打开的窗口中选 “Main Window”&#xff0c;然后选“创建”3 直接…

SpringBoot项目数据脱敏(自定义注解)

文章目录前言一.配置1.脱敏类型枚举&#xff1a;DesensitizeType2.注解&#xff1a;Desensitize3.序列化类&#xff1a;DesensitizeJsonSerializer4.工具类&#xff1a;DesensitizeUtil二、测试&#xff1a;DesensitizeTest三、效果展示总结前言 在互联网应用中&#xff0c;用户…

PSO-TCN-BiLSTM-MATT粒子群优化算法优化时间卷积神经网络-双向长短期记忆神经网络融合多头注意力机制多特征分类预测/故障诊断Matlab实现

基本介绍 1.Matlab实现PSO-TCN-BiLSTM-MATT粒子群算法优化时间卷积神经网络-双向长短期记忆神经网络融合多头注意力机制多特征分类预测&#xff0c;PSO-TCN-BiLSTM-Multihead-Attention&#xff1b; 多头自注意力层 (Multihead-Self-Attention)&#xff1a;Multihead-Self-Atte…

第一篇:Linux 运维入门:虚拟机部署与基础环境配置

目录 一、准备工作与环境规划 二、虚拟机网络配置 1、虚拟网络编辑器设置 2、系统网络配置 3、主机名配置 三、Hosts 文件与 SSH 免密配置 配置 hosts 文件编辑/etc/hosts文件实现主机名解析&#xff1a; 分发 hosts 文件到其他节点 SSH 免密登录配置在 zhangsan101 上…

(一)全栈(react配置/https支持/useState多组件传递/表单提交/React Query/axois封装/Router)

文章目录 项目地址 一、基础配置 1.1 支持https 1. 安装所需要的包 2. 配置 1.2 常用 1. 字符串拼接 二、组件 2.1 useState组件传递 1. App里初始化useState 2. useState和方法的传递 3. 接收传递来的状态和方法 2.2 表单提交 1. 表单组件处理用户输入数据 2. App传来的submit…

【abc417】E - A Path in A Dictionary

Problem StatementYou are given a simple connected undirected graph G with N vertices and M edges. The vertices of G are numbered vertex 1, vertex 2, …, vertex N, and the i-th (1≤i≤M) edge connects vertices Ui​ and Vi​.Find the lexicographically smalle…

linux火焰图

火焰图简介火焰图是一种性能分析的可视化工具&#xff0c;它将CPU的调用栈&#xff08;Call Stack&#xff09;信息以矩形火焰的形式展现出来。Y轴&#xff1a;代表调用栈的深度&#xff08;函数A调用了函数B&#xff0c;B就叠在A上面&#xff09;。X轴&#xff1a;代表CPU的抽…

解剖 .NET 经典:从 Component 到 BackgroundWorker

1️⃣ 背景与定位在 .NET Framework 2.0 时代&#xff0c;微软引入了 BackgroundWorker 来解决 WinForm/WPF 场景下“耗时操作阻塞 UI 线程”的问题&#xff1b;而 Component 早在 1.0 就已存在&#xff0c;是所有可视化/非可视化设计器的“基类”。理解这两者的源码与机制&…

桌面端界面设计 |货物 TMS 系统 - SaaS UI UX 设计:审美积累之境

在物流数字化的浪潮中&#xff0c;货物 TMS 系统的 SaaS 化与 UI/UX 设计正构建着独特的审美坐标系。这不仅是技术与功能的融合&#xff0c;更是一场关于效率美学的深度探索&#xff0c;为行业审美积累注入了鲜活的实践样本。SaaS 模式赋予货物 TMS 系统轻盈而强大的特质&#…

多架构镜像整合全攻略:在Docker中实现单一镜像支持同时支持amd64和arm64架构

多架构支持的挑战 &#xff1a;随着异构计算&#xff08;如 ARM、x86、RISC-V 等&#xff09;的普及&#xff0c;开发者需要为不同硬件平台提供对应的镜像&#xff0c;传统方式需维护多个版本&#xff08;如 image:v1-amd64 和 image:v1-arm64 &#xff09;&#xff0c;导致版本…

Linux730 tr:-d /-s;sort:-r,-n,-R,-o,-t,-k,-u;bash;cut:-d,-c;tee -a;uniq -c -i

回顾 sort sort [选项] 文件-u&#xff1a;唯一&#xff0c;去除重复 -r:按数字大小&#xff0c;倒序排序&#xff0c;大到小 -o:输出文件 -n:按数字大小&#xff0c;顺序排序&#xff0c;小到大 -t: -t后加分割符&#xff0c;按分割符为标准&#xff0c;进行筛选 -k:k后加数字…

力扣457:环形数组是否存在循环

力扣457:环形数组是否存在循环题目思路代码题目 存在一个不含 0 的 环形 数组 nums &#xff0c;每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数&#xff1a; 如果 nums[i] 是正数&#xff0c;向前&#xff08;下标递增方向&#xff09;移动 |nums[i]| 步…

在 Elasticsearch 中落地 Learning to Rank(LTR)

1 为什么要引入 LTR&#xff1f; 常规检索&#xff08;BM25、语义检索、Hybrid、RRF …&#xff09;往往只能基于少量信号&#xff08;关键词命中、向量相似度&#xff09;排序。 Learning-to-Rank 通过机器学习模型把多维度特征&#xff08;文档属性、查询属性、查询-文档相关…

Socket编程——TCP协议

文章目录一、TCP传输二、相关接口三、多进程版本四、多线程版本一、TCP传输 TCP和UDP类似&#xff0c;但是在传输中TCP有输入&#xff0c;输出缓冲区&#xff0c;看下面的传输图片 可以理解为TCP之间的数据传输都是依赖各自的socket&#xff0c;socket就充当传输的中介吧。 而…

GitHub使用小记——本地推送、外部拉取和分支重命名

GitHub 项目推送与拉取等操作使用随记 本小记适用于个人项目或组织项目&#xff0c;涵盖 GitHub 推送、拉取、分支管理、.gitignore 设置等常见需求。 1. 将已有本地工程推送至 GitHub 新仓库 1.1 前提条件 本地项目结构完整&#xff0c;已准备好&#xff1b;本地已安装 Git…