Python模块百科_操作系统接口_os【三】
- [os --- 多种操作系统接口](#os --- 多种操作系统接口)
- 【第一部分】
- 一、相关模块
-
- [1.1 os.path 文件路径](#1.1 os.path 文件路径)
- [1.2 fileinput 文件读取](#1.2 fileinput 文件读取)
- [1.3 tempfile 临时文件和目录](#1.3 tempfile 临时文件和目录)
- [1.4 shutil 高级文件和目录](#1.4 shutil 高级文件和目录)
- [1.5 platform 操作系统底层模块](#1.5 platform 操作系统底层模块)
- 二、关于函数适用性的说明
-
- [2.1 与操作系统相同的接口](#2.1 与操作系统相同的接口)
- [2.2 支持字节串和字符串](#2.2 支持字节串和字符串)
- [2.3 exception OSError](#2.3 exception OSError)
- 三、文件名,命令行参数,以及环境变量
- 四、文件系统编码格式与错误处理句柄
- [五、locale encoding -- 语言区域编码格式](#五、locale encoding -- 语言区域编码格式)
- [六、Python UTF-8 模式](#六、Python UTF-8 模式)
- 【第二部分】
- 七、进程参数
-
- [7.1 os.ctermid()](#7.1 os.ctermid())
- [7.2 os.environ](#7.2 os.environ)
- [7.4 os.fchdir(fd)](#7.4 os.fchdir(fd))
- [7.5 os.getcwd()](#7.5 os.getcwd())
- [7.6 os.fsencode(filename)](#7.6 os.fsencode(filename))
- [7.7 os.fsdecode(filename)](#7.7 os.fsdecode(filename))
- 【第三部分】
-
- [7.8 os.fspath(path)](#7.8 os.fspath(path))
- [7.9 class os.**PathLike**](#7.9 class os.PathLike)
- [7.10 os.getenv(key, default=None)](#7.10 os.getenv(key, default=None))
- [7.11 os.get_exec_path(env=None)](#7.11 os.get_exec_path(env=None))
- [7.12 os.putenv(key, value, /)](#7.12 os.putenv(key, value, /))
- [7.13 os.strerror(code, /)](#7.13 os.strerror(code, /))
- [7.14 os.uname()](#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)
用于将一个表示文件路径的对象转换为一个字符串形式的路径。
这个函数通常在有一个可能是字符串、bytes
或 os.PathLike
对象,并且想要确保得到一个字符串形式的路径时使用。
基本用法示例:
python
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)
python
# 执行结果
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
接口的自定义类:
python
import os
from abc import ABC
from typing import Any
class MyPath(ABC):
def __init__(self, path: str):
self.path = path
def __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)
python
# 执行结果
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()
函数的基本用法示例:
python
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)
python
# 执行结果
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()
返回的目录列表中查找该文件。
下面是一个简单的示例:
python
import os
# 获取执行文件搜索路径
exec_path = os.get_exec_path()
# 打印这些路径
print("Executable search path:", exec_path)
# 尝试运行一个命令,该命令应该在可执行文件搜索路径中的一个目录里
os.system("ping www.baidu.com")
python
# 执行结果【出现乱码】
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=51
183.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()
函数的基本用法:
python
import os
# 设置环境变量
os.putenv('ENV_VARIABLE_NAME', 'value')
# 验证环境变量是否设置成功
print(os.getenv('ENV_VARIABLE_NAME'))
python
# 执行结果【Windows】,返回无意义的值,
None
# 执行结果【Linux】
value
下面是在Windows、Linux下设置环境变量的通用写法:
python
import os
# 在Windows上设置环境变量
os.environ['ENV_VARIABLE_NAME'] = 'value'
# 验证环境变量是否设置成功
print(os.environ.get('ENV_VARIABLE_NAME'))
python
# 执行结果【Windows】
value
# 执行结果【Linux】
value
7.13 os.strerror(code, /)
os
模块中,strerror()
函数是一个内置的函数,用于将错误号(通常是一个整数)转换为对应的错误消息字符串。这个错误号通常是由系统调用或库函数在发生错误时返回的。
strerror()
函数的用法很简单,它接受一个错误号作为参数,并返回与该错误号关联的错误消息字符串。这个字符串可以帮助你理解发生了什么错误。
下面是一个使用strerror()
函数的例子:
python
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()
函数的一个例子:
python
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)
python
# 执行结果
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
模块来获取系统信息的简单示例:
python
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)
python
# 执行结果
system: Windows
node: PS2021EFFASGKO
release: 10
version: 10.0.19045
machine: AMD64
(未完待续......)
may the odds be ever in your favor ~