概述

**os 模块的主要目的之一就是提供一个跨平台的接口来与操作系统进行交互。**通过这个抽象层,开发者可以编写在多种操作系统上都能运行的代码,而无需关心底层操作系统的具体实现细节。

这样做有几个主要优点:

  1. 可移植性:代码可以在不同的操作系统上运行,无需进行大量的修改。
  2. 维护性:由于操作系统特定的实现细节被抽象出来,维护代码变得更容易。
  3. 可读性和可理解性:提供了一组统一的 API,使得代码更容易阅读和理解。
  4. 开发效率:开发者可以更快地开发应用程序,因为他们不需要了解所有操作系统的内部工作机制。

然而,也有一些局限性和挑战:

  1. 性能:抽象层可能会引入一些额外的性能开销。
  2. 功能限制:为了保持跨平台性,os 模块可能不会提供某个特定操作系统上可用的高级功能。
  3. 平台特定的代码:虽然 os 模块尽量提供跨平台的方法,但有时还是需要编写一些平台特定的代码。

总体来说,os 模块确实旨在消除操作系统之间的不一致性,并提供一个更加统一和高级的编程接口。

导入

import os

进程管理

方法描述平台适用性
os.fork()创建一个子进程UNIX/Linux
os.exec*()在当前进程中执行新程序所有(但在 Windows 上有限制)
os.spawn*()创建新进程运行程序所有(但在 UNIX/Linux 上不常用)
os.wait()等待子进程完成UNIX/Linux
os.waitpid(pid, options)等待特定的子进程完成UNIX/Linux
os.kill(pid, signal)向进程发送信号UNIX/Linux
os.terminate()终止当前进程Windows
os.startfile(filepath)使用关联的应用程序打开文件Windows

文件管理

方法描述平台适用性
os.open(file, flags[, mode])打开文件,并返回文件描述符所有
os.close(fd)关闭文件描述符所有
os.read(fd, n)从文件描述符 fd 读取最多 n 个字节所有
os.write(fd, str)写入字符串到文件描述符 fd所有
os.remove(path)删除指定的文件所有
os.rename(src, dst)重命名文件或目录所有
os.stat(path)获取文件或目录的状态信息所有
os.chmod(path, mode)改变文件或目录的权限所有
os.chown(path, uid, gid)改变文件或目录的所有者和所属组UNIX/Linux
os.utime(path, times)更新文件时间戳所有
os.path.getsize(path)获取文件的大小所有
os.path.getmtime(path)获取文件的最后修改时间所有
os.path.getctime(path)获取文件的创建时间所有
os.path.isfile(path)检查指定路径是否是文件所有
os.path.isdir(path)检查指定路径是否是目录所有
os.path.exists(path)检查指定路径是否存在所有
os.path.split(path)将路径分割为目录和文件名所有
os.path.splitext(path)将文件路径分割为文件名和扩展名所有
os.path.join(a, b)将多个路径组合成一个路径所有

目录操作

方法描述平台适用性
os.getcwd()获取当前工作目录所有
os.chdir(path)改变当前工作目录所有
os.mkdir(path)创建新目录所有
os.makedirs(path)创建新目录,如果父目录不存在也会被创建所有
os.rmdir(path)删除目录所有
os.removedirs(path)删除目录,如果目录内有文件也会被删除所有
os.listdir(path)列出指定目录下的所有文件和目录所有
os.scandir(path)返回一个迭代器,包含目录中的 DirEntry 对象所有
os.rename(old, new)重命名目录所有
os.stat(path)获取目录的状态信息所有
os.chmod(path, mode)改变目录的权限所有
os.chown(path, uid, gid)改变目录的所有者和所属组UNIX/Linux
os.path.isdir(path)检查指定路径是否是目录所有
os.path.exists(path)检查指定路径是否存在所有
os.path.split(path)将路径分割为目录和文件名所有
os.path.join(a, b)将多个路径组合成一个路径所有

系统信息

方法描述平台适用性
os.name获取操作系统名字(如 'posix', 'nt'所有
os.uname()获取详细的系统信息(仅 UNIX/Linux)UNIX/Linux
os.environ获取环境变量所有
os.getenv(key)获取特定环境变量的值所有
os.putenv(key, value)设置环境变量的值所有
os.system(command)运行外部命令所有
os.cpu_count()获取 CPU 核心数量所有
os.getpid()获取当前进程 ID所有
os.getppid()获取父进程 ID所有
os.getuid()获取当前用户 ID(仅 UNIX/Linux)UNIX/Linux
os.getgid()获取当前组 ID(仅 UNIX/Linux)UNIX/Linux
os.getlogin()获取当前用户登录名UNIX/Linux, Windows
os.urandom(n)生成 n 个字节的强随机数所有

文件描述符操作

方法描述平台适用性
os.dup(fd)复制文件描述符所有
os.dup2(fd, fd2)复制文件描述符到另一个文件描述符所有
os.fdopen(fd[, mode[, bufsize]])通过文件描述符打开文件对象所有

信号处理

方法描述平台适用性
os.kill(pid, sig)向进程发送信号UNIX/Linux
os.signal(signalnum, handler)设置信号处理程序UNIX/Linux

终端管理

方法描述平台适用性
os.isatty(fd)检查文件描述符是否连接到终端所有
os.ttyname(fd)获取与文件描述符关联的终端名称UNIX/Linux

其他

方法描述平台适用性
os.popen(command[, mode[, bufsize]])打开与一个进程的管道所有
os.pipe()创建一个管道所有
os.tempnam([dir[, prefix]])生成一个唯一的临时文件名(不推荐,使用 tempfile 模块代替)所有
os.tmpfile()创建并打开(‘w+b’)一个新的临时文件(不推荐,使用 tempfile 模块代替)UNIX/Linux