Skip to content

1. 进程管理

(1) 进程创建与控制
  • os.fork()
    在 Unix-like 系统中创建子进程,返回子进程的 PID(Windows 不支持)。

    python
    import os
    
    pid = os.fork()
    if pid == 0:
        print("子进程")
    else:
        print(f"父进程,子进程 PID: {pid}")
  • os.exec*() 系列
    替换当前进程的镜像(如执行新程序):

    python
    os.execlp("ls", "ls", "-l")  # 执行 "ls -l"
  • os.wait()os.waitpid()
    等待子进程结束并获取状态:

    python
    pid, status = os.wait()
    print(f"子进程 {pid} 退出状态: {status}")
(2) 进程终止
  • os.kill(pid, signal)
    向进程发送信号(如 signal.SIGTERM 终止进程):
    python
    import signal
    os.kill(pid, signal.SIGTERM)

2. 文件系统操作

(1) 文件描述符(低级IO)
  • os.open()
    打开文件并返回文件描述符(支持底层标志如 O_CREAT):

    python
    fd = os.open("file.txt", os.O_RDWR | os.O_CREAT, 0o644)
  • os.read(fd, size)os.write(fd, data)
    直接读写文件描述符:

    python
    data = os.read(fd, 1024)
    os.write(fd, b"Hello")
  • os.close(fd)
    关闭文件描述符,避免资源泄漏。

(2) 文件元数据
  • os.stat(path)
    获取文件状态(大小、权限、时间戳等):

    python
    stat_info = os.stat("file.txt")
    print(f"文件大小: {stat_info.st_size} 字节")
  • os.utime(path, times)
    修改文件的访问和修改时间:

    python
    os.utime("file.txt", (1630000000, 1630000000))  # (访问时间, 修改时间)

3. 目录操作

  • os.mkdir(path, mode)
    创建目录:

    python
    os.mkdir("new_dir", 0o755)
  • os.listdir(path)
    列出目录内容:

    python
    files = os.listdir(".")
  • os.chdir(path)
    切换当前工作目录:

    python
    os.chdir("/tmp")

4. 环境变量与用户信息

  • os.environ
    字典形式访问和修改环境变量:

    python
    print(os.environ["PATH"])
    os.environ["MY_VAR"] = "value"
  • os.getuid()os.getgid()
    获取当前用户的 UID 和 GID:

    python
    print(f"用户ID: {os.getuid()}, 组ID: {os.getgid()}")

5. 系统调用与平台适配

  • os.uname()
    获取系统信息(Unix-like 系统):

    python
    sys_info = os.uname()
    print(f"系统: {sys_info.sysname}, 版本: {sys_info.release}")
  • os.name
    检测操作系统类型(如 posixnt):

    python
    if os.name == "posix":
        print("Unix-like 系统")
    elif os.name == "nt":
        print("Windows 系统")

6. 信号处理

  • os.kill()signal 模块
    发送和处理信号:
    python
    import signal
    
    def handler(signum, frame):
        print(f"收到信号: {signum}")
    
    signal.signal(signal.SIGINT, handler)  # 注册 Ctrl+C 处理函数

跨平台注意事项

  1. 路径分隔符
    使用 os.path.join() 处理路径:

    python
    path = os.path.join("dir", "subdir", "file.txt")  # 自动适配系统分隔符
  2. 文件权限
    Windows 不支持 Unix 权限模式,需注意 os.chmod() 的兼容性。

  3. 替代模块

    • subprocess: 更安全的进程管理替代 os.fork()os.exec*()
    • pathlib: 面向对象的路径操作替代 os.path

总结

  • os 模块提供了对操作系统底层的直接访问,适合需要精细控制资源的场景。
  • 核心功能:进程管理、文件操作、环境变量、系统信息。
  • 最佳实践:优先使用高层模块(如 subprocesspathlib),仅在必要时使用底层接口。
  • 跨平台陷阱:注意 Unix 和 Windows 的行为差异,使用条件判断或适配层确保兼容性。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer