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()

os.ctermid() 返回一个指向当前终端名称的字符串。这通常是一个设备文件路径,例如 /dev/tty(在 Unix-like 系统上)或 CON:(在 Windows 上)。

这个方法通常用于确定当前终端或控制台的名称,以便在需要时(例如,当你想将输出重定向到终端或控制台时)使用。

下面是一个简单的示例:

import os

# 获取当前终端或控制台的名称
terminal_name = os.ctermid()
print("当前终端名称:", terminal_name)
# 执行结果(以下结果都有可能)
当前终端名称: /dev/tty
当前终端名称: CON:

7.2 os.environ

一个 mapping 对象,其中键值是代表进程环境的字符串。 例如,environ['HOME'] 是你的主目录(在某些平台上)的路径名,相当于 C 中的 getenv("HOME")

这个映射是在第一次导入 os 模块时捕获的,通常作为 Python 启动时处理 site.py 的一部分。除了通过直接修改 os.environ 之外,在此之后对环境所做的更改不会反映在 os.environ 中。

该映射除了可以用于查询环境外,还能用于修改环境。当该映射被修改时,将自动调用 putenv()

在Unix系统上,键和值会使用 sys.getfilesystemencoding()'surrogateescape' 的错误处理。如果你想使用其他的编码,使用 environb

在 Windows 上,这些键会被转换为大写形式。 这也会在获取、设备或删除条目时被应用。 例如,environ['monty'] = 'python' 会将键 'MONTY' 映射到值 'python'

备注 直接调用 putenv() 并不会影响 os.environ ,所以推荐直接修改 os.environ

备注 在某些平台上,包括 FreeBSD 和 macOS 等,设置 environ 可能会导致内存泄漏。 请参阅有关 putenv() 的系统文档。

可以删除映射中的元素来删除对应的环境变量。当从 os.environ 删除元素时,以及调用 pop()clear() 之一时,将自动调用 unsetenv()

在 3.9 版本发生变更: 已更新并支持了 PEP 584 的合并 (|) 和更新 (|=) 运算符。

示例

import os

for key,val in os.environ.items():
    print(key, val)
# 执行结果
ALLUSERSPROFILE C:\ProgramData
COMMONPROGRAMFILES C:\Program Files\Common Files
COMMONPROGRAMFILES(X86) C:\Program Files (x86)\Common Files
COMMONPROGRAMW6432 C:\Program Files\Common Files
......

7.3 os.chdir(path)

os.chdir(path) 用于改变当前工作目录到指定的路径。

以下是简单示例:

import os

# 原始的工作目录
original_dir = os.getcwd()
print(f"原始工作目录: {original_dir}")

# 要切换到的目标目录
target_dir = "d:/temp"

# 改变当前工作目录
os.chdir(target_dir)

# 确认工作目录已经改变
changed_dir = os.getcwd()
print(f"改变后的工作目录: {changed_dir}")

# 最后,你可能想返回到原始的工作目录
os.chdir(original_dir)

# 确认工作目录已经返回
final_dir = os.getcwd()
print(f"最终的工作目录: {final_dir}")
# 执行结果
原始工作目录: D:\UserProjects\Python\moduleslib
改变后的工作目录: d:\temp
最终的工作目录: D:\UserProjects\Python\moduleslib

7.4 os.fchdir(fd)

os.fchdir() 方法通过文件描述符改变当前工作目录。Unix, Windows 上可用。

语法

**fchdir()**方法语法格式如下:

os.fchdir(fd);

参数

  • fd – 文件描述符

返回值

该方法没有返回值。

示例

import os

# 首先到目录 "C:\Program Files (x86)"
os.chdir(r"C:\Program Files (x86)" )

# 输出当前目录
print("当前工作目录为 : %s" % os.getcwd())

# 打开新目录 "d:\tmp"
try:
    fd = os.open(r"d:\tmp", os.O_RDWR)
    os.fchdir(fd)
    # 输出当前目录
    print("fchdir==>", "当前工作目录为 : %s" % os.getcwd())
    # 关闭=打开的目录
    os.close(fd)
except OSError as ex:
    print("fchdir error==>", ex.strerror)

# 打开新目录 "d:\temp"
try:
    os.chdir(r"d:\temp")
    # 输出当前目录
    print("chdir==>", "当前工作目录为 : %s" % os.getcwd())
except OSError as ex:
    print("chdir error==>", ex.strerror)
# 执行结果【需要更高用户权限】
当前工作目录为 : C:\Program Files (x86)
fchdir error==> Permission denied
chdir==> 当前工作目录为 : d:\temp

7.5 os.getcwd()

getcwd函数用于获取当前工作目录(Current Working Directory)的完整路径。

以下是简单示例:

import os

# 获取当前工作目录
current_working_directory = os.getcwd()

# 打印当前工作目录
print("当前工作目录是:", current_working_directory)
# 执行结果
D:\Program Files

7.6 os.fsencode(filename)

将 类似路径形式的 filename 编码为 filesystem encoding and error handler;原样返回 bytes

fsdecode() 是此函数的逆向函数。

语法:

os.fsencode(filename) 

参数:

  • 文件名:代表文件系统路径的path-like对象。 path-like对象是表示路径的str或bytes对象。

  • ***返回类型:***此方法返回一个代表已编码文件名的字节串。

示例

import os

filename = "/home/user/File.txt"

encode = os.fsencode(filename)
print(encode)
print(os.fsdecode(encode))
b'/home/user/File.txt'
/home/user/File.txt

7.7 os.fsdecode(filename)

根据 filesystem encoding and error handler 来解码 类似路径形式的 filename;原样返回 str

fsencode() 是此函数的逆向函数。

示例见7.6节


(未完待续……)

may the odds be ever in your favor ~

03-08 12:38