You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用os.makedirs单次执行生成两个间隔1分钟目录问题排查

问题诱因
  • 核心原因:时间戳重复生成
    当前代码大概率存在两次实例化now时间戳的逻辑:第一次生成路径判断目录不存在、创建目录,第二次生成路径用于文件写入时,因为执行间隔刚好跨了1分钟,生成了新的时间戳路径,此时新路径不存在,会触发第二次目录创建,最终生成两个目录。不同用户的脚本执行速度不同:你的账号运行时两次时间戳生成间隔不足1分钟,路径一致不会生成新目录;该用户的运行环境可能存在更高的IO延迟、更多的用户级初始化加载项,导致两次时间戳生成稳定跨分钟,每次都复现双目录问题。
  • 次要原因:权限差异
    该用户对第一次创建的目录没有写入权限,写入逻辑捕获异常后重新触发了目录创建流程,此时刚好跨分钟生成新的目录。
  • 边缘原因:脚本重复触发
    该用户的shell配置、命令alias存在异常,执行脚本命令时实际启动了两个进程,两个进程的启动时间刚好跨分钟,分别生成了两个目录。
修复方案
    1. 全局复用唯一时间戳
      脚本启动时仅实例化一次时间戳变量,全脚本所有涉及该输出路径的逻辑都复用同一个时间戳,禁止重复生成时间戳。同时优化目录创建逻辑,避免路径判断的竞态问题,示例代码如下:
    import os
    from datetime import datetime
    
    # 脚本初始化阶段仅生成一次时间戳,全局复用
    GLOBAL_NOW = datetime.now()
    file = "your_target_file" # 替换为原有file变量定义
    
    def get_output_dir():
        # 全脚本仅通过该函数获取输出目录,确保路径唯一
        outdir = os.path.join(os.getcwd(), "output", f"{file}.{GLOBAL_NOW.strftime('%m.%d.%Y.%H.%M')}", "")
        # 加exist_ok=True,无需提前判断目录是否存在,避免TOCTOU竞态异常
        os.makedirs(outdir, exist_ok=True)
        return outdir
    
    # 后续所有读写逻辑都调用get_output_dir()获取路径,不会生成新的时间戳
    outdir = get_output_dir()
    
    1. 排查用户环境配置
      检查异常用户的账号权限:确认该用户对output父目录、创建的子目录有读写执行权限;检查用户的shell配置,确认执行脚本的命令不会隐式触发两次进程;排查VPN链路是否存在请求重发导致脚本重复触发的问题。

内容的提问来源于stack exchange,提问作者novice_make_user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:54:03