Python模块百科_操作系统接口_os【三】

Python模块百科_操作系统接口_os【三】

  • os --- 多种操作系统接口
  • 【第一部分】
  • 一、相关模块
    • 1.1 os.path 文件路径
    • 1.2 fileinput 文件读取
    • 1.3 tempfile 临时文件和目录
    • 1.4 shutil 高级文件和目录
    • 1.5 platform 操作系统底层模块
  • 二、关于函数适用性的说明
    • 2.1 与操作系统相同的接口
    • 2.2 支持字节串和字符串
    • 2.3 exception OSError
  • 三、文件名,命令行参数,以及环境变量
  • 四、文件系统编码格式与错误处理句柄
  • 五、locale encoding -- 语言区域编码格式
  • 六、Python UTF-8 模式
  • 【第二部分】
  • 七、进程参数
    • 7.1 os.ctermid()
    • 7.2 os.environ
    • 7.4 os.fchdir(fd)
    • 7.5 os.getcwd()
    • 7.6 os.fsencode(filename)
    • 7.7 os.fsdecode(filename)
  • 【第三部分】
    • 7.8 os.fspath(path)
    • 7.9 class os.**PathLike**
    • 7.10 os.getenv(key, default=None)
    • 7.11 os.get_exec_path(env=None)
    • 7.12 os.putenv(key, value, /)
    • 7.13 os.strerror(code, /)
    • 7.14 os.uname()

os — 多种操作系统接口

源代码: Lib/os.py


  os 模块提供了与操作系统交互的多种功能。可以使用 os 模块来执行文件或目录操作,如读取或修改环境变量、访问命令行参数、处理文件路径、执行系统命令等。

【第一部分】


一、相关模块

1.1 os.path 文件路径

1.2 fileinput 文件读取

1.3 tempfile 临时文件和目录

1.4 shutil 高级文件和目录

1.5 platform 操作系统底层模块

二、关于函数适用性的说明

2.1 与操作系统相同的接口

2.2 支持字节串和字符串

2.3 exception OSError

三、文件名,命令行参数,以及环境变量

四、文件系统编码格式与错误处理句柄

五、locale encoding – 语言区域编码格式

六、Python UTF-8 模式

【第二部分】


七、进程参数

os模块中,下列函数和数据、类等提供了操作当前进程和用户的信息。

7.1 os.ctermid()

7.2 os.environ

7.4 os.fchdir(fd)

7.5 os.getcwd()

7.6 os.fsencode(filename)

7.7 os.fsdecode(filename)

【第三部分】


7.8 os.fspath(path)

os.fspath(path) 用于将一个表示文件路径的对象转换为一个字符串形式的路径。

这个函数通常在有一个可能是字符串、bytesos.PathLike 对象,并且想要确保得到一个字符串形式的路径时使用。

基本用法示例:

import os# 对于字符串
path_str = os.fspath("path/to/file.txt")
print(path_str)  # 对于 bytes
path_bytes = os.fspath(b"path/to/file.txt")
print(path_bytes)  # 对于 Path 对象
from pathlib import Path
path_obj = Path("path/to/file.txt")
path_str = os.fspath(path_obj)
print(path_str)  
# 执行结果
path/to/file.txt
b'path/to/file.txt'
path\to\file.txt

os.PathLike是一个抽象基类,它定义了一个fspath() 方法。

任何定义了 __fspath__() 方法的对象都可以被用作 os.fspath() 的参数。这允许 os.fspath() 与多种不同类型的路径表示对象一起使用。

注意:

os.fspath() 主要是用于确保得到一个字符串或 bytes 形式的路径,而不是其他类型的对象。在需要将路径传递给期望字符串或 bytes 形式的路径的函数或方法时特别有用。

7.9 class os.PathLike

os.PathLike 不是 Python 标准库中一个实际存在的类。相反,它是一个抽象基类(ABC,Abstract Base Class)的概念,用于定义任何实现了特定接口(即定义了一个 __fspath__() 方法的类)的对象应该具有的行为。抽象基类通常用于类型提示和定义接口的通用行为,但并不直接实例化。

在 Python 的 os 模块中,可能会遇到与路径相关的操作,其中一些操作期望接收一个表示文件路径的对象。os.PathLike 被用作类型注解,表明这些函数或方法可以接受任何实现了 __fspath__() 方法的对象。这样,当使用类型检查工具(如 mypy)时,可以确保传递给这些函数的对象提供了必要的接口。

__fspath__() 方法应该返回一个字符串或字节串,表示文件路径。这允许对象自定义它们如何被转换为路径表示形式。例如,pathlib.Path 对象就实现了 __fspath__() 方法,所以它们可以直接传递给期望字符串路径的函数。

下面是一个简单的示例,演示如何创建一个符合 os.PathLike 接口的自定义类:

import os
from abc import ABC
from typing import Anyclass MyPath(ABC):def __init__(self, path: str):self.path = pathdef __fspath__(self) -> Any:return self.path# 使用自定义的 MyPath 类
my_path = MyPath("d:/temp/file.txt")# os.fspath 将 MyPath 对象转换为字符串路径
string_path = os.fspath(my_path)
print(string_path)  # 任何期望字符串路径的函数也应该能够接受 MyPath 对象
with open(my_path, 'r') as file:content = file.read()print(content)
# 执行结果
d:/temp/file.txt

在 Python 的类型提示中,可能会看到 os.PathLike[str]os.PathLike[bytes] 这样的注解,它们表示期望一个实现了 __fspath__() 方法并返回相应类型(字符串或字节串)的对象。

某些对象用于表示文件系统中的路径(如 pathlib.PurePath 对象),本类是这些对象的 抽象基类。

7.10 os.getenv(key, default=None)

os.getenv() 用于从操作系统的环境变量中获取指定名称的值。如果环境变量存在,则 os.getenv() 返回该变量的值;如果环境变量不存在,则返回一个默认值(如果提供了的话),否则返回 None

下面是 os.getenv() 函数的基本用法示例:

import os# 获取名为 'MY_VARIABLE' 的环境变量的值
value = os.getenv('MY_VARIABLE')# 如果环境变量不存在,则打印 None
print(value)  # 提供一个默认值
default_value = 'default'
value_or_default = os.getenv('MY_VARIABLE', default_value)# 打印环境变量的值或默认值
print(value_or_default)  # 设置环境变量并获取它
os.environ['MY_VARIABLE'] = 'Hello, World!'
value = os.getenv('MY_VARIABLE')# 打印环境变量的值
print(value)  
# 执行结果
None
default
Hello, World!

os.environ 是一个表示当前进程环境变量的字典,你可以通过修改这个字典来设置或更改环境变量的值。

使用 os.environ 直接设置环境变量通常只在当前进程中有效,不会影响其他进程或整个系统。

注意:

**os.getenv() 函数是区分大小写的,这意味着环境变量的名称应该与其在操作系统中设置时的大小写完全一致。

7.11 os.get_exec_path(env=None)

在 Python 的 os 模块中,get_exec_path() 是一个方法,用于返回当前进程用来查找执行文件的目录列表。这通常指的是环境变量 PATH 的内容,该环境变量在 Unix 和 Unix-like 系统(如 Linux 和 macOS)中用于指定可执行文件的搜索路径。

当您尝试运行一个可执行文件(例如通过 os.system()subprocess.run() 等)时,操作系统会在这个由 get_exec_path() 返回的目录列表中查找该文件。

下面是一个简单的示例:

import os# 获取执行文件搜索路径
exec_path = os.get_exec_path()# 打印这些路径
print("Executable search path:", exec_path)# 尝试运行一个命令,该命令应该在可执行文件搜索路径中的一个目录里
os.system("ping www.baidu.com")
# 执行结果【出现乱码】
Executable search path: ['C:\\Program Files\\PlasticSCM5\\server', 'C:\\Program Files\\PlasticSCM5\\client', 'D:\\Python310\\Scripts\\', 'D:\\Python310\\', 'C:\\Windows\\system32', 'C:\\Windows', 'C:\\Windows\\System32\\Wbem', 'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\', 'C:\\Windows\\System32\\OpenSSH\\', 'C:\\Program Files\\Microsoft VS Code\\bin', 'C:\\Program Files\\dotnet\\', 'C:\\Users\\adminFairton\\AppData\\Local\\Microsoft\\WindowsApps'���� Ping www.a.shifen.com [183.2.172.42] ���� 32 �ֽڵ�����:
���� 183.2.172.42 �Ļظ�: �ֽ�=32 ʱ��=7ms TTL=51
���� 183.2.172.42 �Ļظ�: �ֽ�=32 ʱ��=7ms TTL=51
���� 183.2.172.42 �Ļظ�: �ֽ�=32 ʱ��=6ms TTL=51
���� 183.2.172.42 �Ļظ�: �ֽ�=32 ʱ��=7ms TTL=51183.2.172.42 �� Ping ͳ����Ϣ:���ݰ�: �ѷ��� = 4���ѽ��� = 4����ʧ = 0 (0% ��ʧ)��
�����г̵Ĺ���ʱ��(�Ժ���Ϊ��λ):��� = 6ms��� = 7ms��ƽ�� = 6ms

需要注意的是,os.get_exec_path() 返回的是 Python 解释器用来查找执行文件的路径,它可能与系统的 PATH 环境变量有所不同。

特别是,当 Python 解释器是通过虚拟环境或特定的启动脚本运行时,os.get_exec_path() 的输出可能会受到这些环境的影响。

7.12 os.putenv(key, value, /)

os模块中,putenv()函数用于设置环境变量的值。环境变量通常是在操作系统中定义的全局变量,可以被系统中的任何进程访问。

putenv()允许你在Python脚本中修改这些环境变量的值。

注意:putenv()函数只在当前进程中修改环境变量的值。它不会影响到其他进程或系统级别的环境变量设置。当前进程结束时,修改的环境变量也会消失除非它们也被写入到了用户的shell配置文件(如.bashrc.bash_profile.zshrc等)或其他持久化的配置中。

下面是putenv()函数的基本用法:

import os# 设置环境变量
os.putenv('ENV_VARIABLE_NAME', 'value')# 验证环境变量是否设置成功
print(os.getenv('ENV_VARIABLE_NAME'))  
# 执行结果【Windows】,返回无意义的值,
None
# 执行结果【Linux】
value

下面是在Windows、Linux下设置环境变量的通用写法:

import os# 在Windows上设置环境变量
os.environ['ENV_VARIABLE_NAME'] = 'value'# 验证环境变量是否设置成功
print(os.environ.get('ENV_VARIABLE_NAME')) 
# 执行结果【Windows】
value
# 执行结果【Linux】
value

7.13 os.strerror(code, /)

os模块中,strerror()函数是一个内置的函数,用于将错误号(通常是一个整数)转换为对应的错误消息字符串。这个错误号通常是由系统调用或库函数在发生错误时返回的。

strerror()函数的用法很简单,它接受一个错误号作为参数,并返回与该错误号关联的错误消息字符串。这个字符串可以帮助你理解发生了什么错误。

下面是一个使用strerror()函数的例子:

import os# 假设我们有一个错误号
error_number = 2  # 在Unix和Linux中,错误号2通常表示"No such file or directory"# 使用strerror()获取错误消息
error_message = os.strerror(error_number)print(f"Error number {error_number} corresponds to: {error_message}")
# 执行结果
Error number 2 corresponds to: No such file or directory

注意:strerror()函数返回的错误消息是依赖于操作系统的,并且通常是本地化的,这意味着它会根据操作系统的语言设置返回相应语言的错误消息。

7.14 os.uname()

os模块中,uname()函数用于获取关于底层操作系统的详细信息。它返回一个五元组,其中包含以下关于当前系统的信息:

  • sysname: 操作系统的名称。
  • nodename: 当前节点的网络名称(主机名)。
  • release: 操作系统的发行版本。
  • version: 操作系统的版本。
  • machine: 硬件名称,通常是机器的型号(如“x86_64”)。

以下是如何使用os.uname()函数的一个例子:

import os# 获取系统信息
system_info = os.uname()# 打印系统信息
print("sysname:", system_info.sysname)
print("nodename:", system_info.nodename)
print("release:", system_info.release)
print("version:", system_info.version)
print("machine:", system_info.machine)
# 执行结果
sysname: Linux
nodename: my-computer
release: 5.4.0-73-generic
version: #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2023
machine: x86_64

注意:os.uname()函数只在类Unix系统中可用。在Windows系统中,os.uname()可能会引发AttributeError异常。

在Windows平台上,可以通过os.name获取操作系统名称,platform.uname()platform.architecture()来获取类似的信息。

以下是在Windows上使用platform模块来获取系统信息的简单示例:

import platform# 获取系统信息
system_info = platform.uname()# 打印系统信息
print("system:", system_info.system)
print("node:", system_info.node)
print("release:", system_info.release)
print("version:", system_info.version)
print("machine:", system_info.machine)
# 执行结果
system: Windows
node: PS2021EFFASGKO
release: 10
version: 10.0.19045
machine: AMD64

(未完待续……)


may the odds be ever in your favor ~

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

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

相关文章

C++ 中的头文件和源文件

#include<>一般用于包含系统头文件&#xff0c;诸如stdlib.h、stdio.h、iostream等&#xff1b; 类库目录下查找失败&#xff0c;编译器会终止查找&#xff0c;直接报错&#xff1a;No such file or directory. #include""一般用于包含自定义头文件&#xff…

【JAVA】CSS3:3D、过渡、动画、布局、伸缩盒

1 3D变换 1.1 3D空间与景深 /* 开启3D空间,父元素必须开启 */transform-style: preserve-3d;/* 设置景深&#xff08;你与z0平面的距离 */perspective:50px; 1.2 透视点位置 透视点位置&#xff1a;观察者位置 /* 100px越大&#xff0c;越感觉自己边向右走并看&#xff0c;…

stega1

题目链接&#xff1a;ctf.show 下载附件打开是一张jpg照片 无密码型jphs隐写得到flag flag{3c87fb959e5910b40a04e0491bf230fb}

微信小程序开发系列(二十五)·wxml语法·条件渲染wx:if, wx:elif, wx:else 属性组以及hidden 属性的使用

目录 1. 使用 wx:if、wx:elif、wx:else 属性组 2. 使用 hidden 属性 条件渲染主要用来控制页面结构的展示和隐藏,在微信小程序中实现条件渲染有两种方式: 1. 使用 wx:if, wx:elif, wx:else 属性组 2. 使用 hidden 属性 wx:if 和 hidden 二者的区别&#xff1a; 1. wx…

操作系统笔记(进程)

注&#xff1a; 下面图片资源来源于 王道计算机考研 操作系统 1.进程概念 进程&#xff08;process&#xff09;&#xff1a;是动态的&#xff0c;是程序的一次执行过程&#xff08;同一程序多次执行&#xff0c;会产生多个进程&#xff09;程序&#xff1a;是静态的&…

synchronized 锁的升级

锁的状态 synchronized 在jdk1.6之前是重量级锁&#xff0c;每次都要去和操作系统打交道&#xff0c;而操作系统层面的操作是比较耗性能的&#xff0c;需要将用户态转换为内核态。所以在jdk1.6后就有了锁的升级过程&#xff0c;总共有四种状态&#xff1a;无锁、偏向锁、轻量级…

基于电鳗觅食优化算法(Electric eel foraging optimization,EEFO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

指针【理论知识速成】(5)

一.回调函数&#xff1a; 1.什么事回调函数&#xff1a;通过函数指针调用函数 2.应用例子&#xff1a; https://blog.csdn.net/hot_water_oh/article/details/136572650?spm1001.2014.3001.5501 &#xff08;此链接为提到转义表所在博客的链接&#xff09; 依然以转义表为例…

drone ci 是什么

Drone CI是一个开源的持续集成和持续部署&#xff08;CI/CD&#xff09;系统&#xff0c;它使用Docker容器技术自动化软件的构建、测试和部署过程。Drone的设计哲学是简单和易用&#xff0c;通过使用Docker容器&#xff0c;它可以很容易地创建隔离的环境来运行测试和部署任务&a…

STM32使用定时器驱动电机

STM32使用定时器驱动电机 1、对定时器进行初始化配置1.1、include "encoder.c"文件 主函数 1、对定时器进行初始化配置 1.1、include "encoder.c"文件 #include "encoder.h"void TIM4_Encoder_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO…

详细讲解Xilinx DDR3 的MIG IP生成步骤及参数含义

前几篇文章讲解了SDRAM到DDR3各自的变化&#xff0c;本文讲解如何使用DDR3&#xff0c;在Altera的Cyclone IV开发板上一般会使用SDRAM作为存储数据的芯片&#xff0c;而Xilinx的S6和7000系列一般使用DDR3作为存储数据的芯片。 从SDRAM芯片内部结构分析其原理&#xff0c;从内部…

策略模式(Strategy mode)

一、策略模式概述 策略模式是一种行为设计模式&#xff0c;它定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。在游戏开发中&#xff0c;这意味着我们可以根据不同的游戏状态、角色类型…

从空白镜像创建Docker hello world

文章目录 写在前面基础知识方法一&#xff1a;使用echo工具方法二&#xff0c;使用c语言程序方法三&#xff0c;使用汇编语言小结 写在前面 尝试搞了下docker&#xff0c;网上的教程大多是让下载一个ubuntu这种完整镜像&#xff0c;寥寥几篇从空白镜像开始创建的&#xff0c;也…

HSM 网络安全 信息安全

文章目录 HSMHSM信息安全功能汽车电子网络安全中HSM 的应用场景选择适合汽车电子网络安全的 HSM符合汽车安全标准和法规要求的HSMHSM 在汽车电子网络安全中的可靠性和安全性评估汽车电子网络的安全性汽车 HSM(Hardware Security Module)模块开发汽车 HSM(Hardware Security …

文件系统事件监听

文件系统事件和网络IO事件一样&#xff0c;也可以通过epoll或者IOCP 事件管理器统一调度&#xff0c;当所监控的文件或文件夹发生了增删改的事件时&#xff0c;就会触发事件回调&#xff0c;进行事件处理。很常见的应用&#xff0c;如配置文件立即生效功能&#xff0c;就可以通…

SpringBoot自定义banner,自定义logo

SpringBoot自定义banner&#xff0c;自定义logo 在线网站 http://www.network-science.de/ascii/?spma2c6h.12873639.article-detail.9.7acc2c9aSTnQdW https://www.bootschool.net/ascii?spma2c6h.12873639.article-detail.8.7acc2c9aSTnQdW https://patorjk.com/softwa…

官方安装配置要求服务器最低2核4G

官方安装配置要求服务器至少2核、4G。 如果服务器低于这个要求&#xff0c;就没有必要安装&#xff0c;因为用户体验超级差。 对于服务器CPU来说&#xff0c;建议2到4核就完全足够了&#xff0c;太多就浪费了&#xff0c;但是内存越大越好&#xff0c;最好是4G以上。 如果服务器…

创建Django项目,实现视图,路由

初识Django 1、创建Django项目 Django项目的创建的路径不要有中文和空格&#xff1b;【计算机名称不要是中文】 1、在cmd中命令进行创建Django项目打开存放项目的位置创建Django项目&#xff1a;django-admin startproject 项目名称(注意&#xff1a;项目名称不要是中文)启动…

贝叶斯优化的门控循环神经网络BO-GRU(时序预测)的Matlab实现

贝叶斯优化的门控循环神经网络&#xff08;BO-GRU&#xff09;是一种结合了贝叶斯优化&#xff08;Bayesian Optimization, BO&#xff09;和门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09;的模型&#xff0c;旨在进行时序预测。这种模型特别适用于时间序列数…

计算机网络概述(接入网和物理媒体)

一、接入网和物理媒体 将终端系统连接到边缘路由器的途径&#xff1a; 住宅接入网、机构接入网络、移动接入网络。 1.接入网:家庭网络 &#xff08;1&#xff09;Dial-up&#xff08;拨号&#xff09; Modem 将上网数据调制加兹安音频信号上在电话线是哪个传输&#xff0c;在…