J'Blog

18 课 · 进阶

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

操作系统接口与环境变量

原文:os 与环境变量

一句话

os 模块提供操作系统接口,让 Python 程序能操作文件、进程和环境变量。

什么时候翻这页

  • Agent 需要读取或设置环境变量以配置自身行为
  • 工具调用需要访问文件系统或执行系统命令
  • Agent 需要管理子进程或执行外部程序
  • 需要处理跨平台文件路径和系统差异

核心概念

  • 环境变量:操作系统提供的键值对,用于存储配置信息
  • 文件描述符:操作系统用于标识打开文件的整数
  • 进程管理:创建、控制和监控操作系统进程
  • 文件系统接口:访问和操作文件与目录的函数集合
  • 系统调用:程序请求操作系统服务的接口

怎么做

环境变量操作

import os

# 读取环境变量
api_key = os.getenv('API_KEY', 'default_value')
print(f"API Key: {api_key}")

# 设置环境变量
os.environ['API_KEY'] = 'new_value'

# 删除环境变量
if 'TEMP_VAR' in os.environ:
    del os.environ['TEMP_VAR']

文件操作

# 检查文件是否存在
if os.path.exists('file.txt'):
    print("文件存在")

# 获取文件信息
file_stat = os.stat('file.txt')
print(f"文件大小: {file_stat.st_size} 字节")

# 遍历目录
with os.scandir('/path/to/dir') as entries:
    for entry in entries:
        if entry.is_file():
            print(f"文件: {entry.name}")

进程管理

# 执行命令
import subprocess

# 使用 os.system (简单但不推荐)
os.system('ls -l')

# 使用 subprocess (推荐)
subprocess.run(['ls', '-l'])

# 创建子进程
pid = os.fork()
if pid == 0:
    # 子进程
    print("这是子进程")
else:
    # 父进程
    print(f"这是父进程,子进程ID: {pid}")

命令 / API 速查

函数/方法描述
os.environ包含环境变量的字典对象
os.getenv(key, default)获取环境变量值
os.putenv(key, value)设置环境变量
os.path.exists(path)检查路径是否存在
os.stat(path)获取文件/目录状态信息
os.listdir(path)列出目录内容
os.mkdir(path)创建目录
os.remove(path)删除文件
os.rename(src, dst)重命名文件/目录
os.getcwd()获取当前工作目录
os.chdir(path)更改当前工作目录
os.fork()创建子进程
os.execvp(file, args)执行新程序
os.spawnv(mode, path, args)创建新进程
os.waitpid(pid, options)等待子进程结束

与 Agent 开发的联系

  • 环境配置:Agent 通常通过环境变量获取 API 密钥、配置信息等,os.getenv() 是获取这些配置的安全方式
  • 工具调用:当 Agent 需要执行外部工具或命令时,os.system()subprocess 模块提供了执行能力
  • 文件操作:Agent 可能需要读取或写入文件来存储状态或结果,os 模块提供了跨平台的文件操作接口

初学者易错点

  • 环境变量修改不生效:直接调用 os.putenv() 不会更新 os.environ,应该直接修改 os.environ
  • 路径分隔符混用:不同操作系统使用不同的路径分隔符(/ vs \),应使用 os.path.join() 而不是字符串拼接
  • 文件描述符未关闭:使用 os.open() 等低级函数打开的文件描述符需要手动关闭,否则会导致资源泄漏
  • 权限问题:文件操作可能因权限不足而失败,应使用 try-except 处理 PermissionError
  • 跨平台兼容性:某些 os 函数在不同平台上行为不同,编写跨平台代码时需要注意这些差异

相关词条

  • library-os-path - 路名操作与路径处理
  • library-subprocess - 进程管理与子进程通信
  • library-shutil - 高级文件操作
  • library-tempfile - 临时文件与目录处理
  • library-pathlib - 面向对象的路径操作
  • library-sys - 系统相关参数与函数

官方原文:https://docs.python.org/zh-cn/3/library/os.html