1. 进程管理
(1) 进程创建与控制
os.fork()
在 Unix-like 系统中创建子进程,返回子进程的 PID(Windows 不支持)。pythonimport os pid = os.fork() if pid == 0: print("子进程") else: print(f"父进程,子进程 PID: {pid}")os.exec*()系列
替换当前进程的镜像(如执行新程序):pythonos.execlp("ls", "ls", "-l") # 执行 "ls -l"os.wait()和os.waitpid()
等待子进程结束并获取状态:pythonpid, status = os.wait() print(f"子进程 {pid} 退出状态: {status}")
(2) 进程终止
os.kill(pid, signal)
向进程发送信号(如signal.SIGTERM终止进程):pythonimport signal os.kill(pid, signal.SIGTERM)
2. 文件系统操作
(1) 文件描述符(低级IO)
os.open()
打开文件并返回文件描述符(支持底层标志如O_CREAT):pythonfd = os.open("file.txt", os.O_RDWR | os.O_CREAT, 0o644)os.read(fd, size)和os.write(fd, data)
直接读写文件描述符:pythondata = os.read(fd, 1024) os.write(fd, b"Hello")os.close(fd)
关闭文件描述符,避免资源泄漏。
(2) 文件元数据
os.stat(path)
获取文件状态(大小、权限、时间戳等):pythonstat_info = os.stat("file.txt") print(f"文件大小: {stat_info.st_size} 字节")os.utime(path, times)
修改文件的访问和修改时间:pythonos.utime("file.txt", (1630000000, 1630000000)) # (访问时间, 修改时间)
3. 目录操作
os.mkdir(path, mode)
创建目录:pythonos.mkdir("new_dir", 0o755)os.listdir(path)
列出目录内容:pythonfiles = os.listdir(".")os.chdir(path)
切换当前工作目录:pythonos.chdir("/tmp")
4. 环境变量与用户信息
os.environ
字典形式访问和修改环境变量:pythonprint(os.environ["PATH"]) os.environ["MY_VAR"] = "value"os.getuid()和os.getgid()
获取当前用户的 UID 和 GID:pythonprint(f"用户ID: {os.getuid()}, 组ID: {os.getgid()}")
5. 系统调用与平台适配
os.uname()
获取系统信息(Unix-like 系统):pythonsys_info = os.uname() print(f"系统: {sys_info.sysname}, 版本: {sys_info.release}")os.name
检测操作系统类型(如posix、nt):pythonif os.name == "posix": print("Unix-like 系统") elif os.name == "nt": print("Windows 系统")
6. 信号处理
os.kill()与signal模块
发送和处理信号:pythonimport signal def handler(signum, frame): print(f"收到信号: {signum}") signal.signal(signal.SIGINT, handler) # 注册 Ctrl+C 处理函数
跨平台注意事项
路径分隔符
使用os.path.join()处理路径:pythonpath = os.path.join("dir", "subdir", "file.txt") # 自动适配系统分隔符文件权限
Windows 不支持 Unix 权限模式,需注意os.chmod()的兼容性。替代模块
subprocess: 更安全的进程管理替代os.fork()和os.exec*()。pathlib: 面向对象的路径操作替代os.path。
总结
os模块提供了对操作系统底层的直接访问,适合需要精细控制资源的场景。- 核心功能:进程管理、文件操作、环境变量、系统信息。
- 最佳实践:优先使用高层模块(如
subprocess、pathlib),仅在必要时使用底层接口。 - 跨平台陷阱:注意 Unix 和 Windows 的行为差异,使用条件判断或适配层确保兼容性。