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

lxplus服务器PyROOT代码创建目录时PermissionError问题求助

解决lxplus上PyROOT代码的PermissionError问题

错误原因

报错显示PermissionError: [Errno 13] Permission denied: '/DiTauHLT_Efficiency',核心问题是代码尝试在系统根目录(/)下创建文件夹,而普通用户没有根目录的写入权限。

这是因为初始opath为空时,第一次路径拼接opath = opath +"/"+hist2.GetName()会生成以/开头的绝对路径(比如/DiTauHLT_Efficiency),直接指向根目录。

修复步骤

1. 指定有权限的初始输出路径

调用loop2Dir时,不要传空字符串作为opath,改用相对路径或用户主目录下的绝对路径:

  • 相对路径示例:output_path_op = "./DiTauHLT_Efficiency"(会在当前脚本所在目录创建文件夹)
  • 绝对路径示例:output_path_op = "/afs/cern.ch/user/j/joaquin/DiTauHLT_Efficiency"(替换为你的lxplus用户目录路径)

2. 简化并修复mkdir_p函数的异常逻辑

原函数的异常处理存在逻辑冗余,Python 3.2+的os.makedirs支持exist_ok=True参数,可直接简化为:

import os
import errno

def mkdir_p(path):
    try:
        os.makedirs(path, exist_ok=True)
    except OSError as exc:
        # 只有当路径已存在但不是目录,或者其他权限/系统错误时才抛出异常
        if exc.errno != errno.EEXIST or not os.path.isdir(path):
            raise

3. 修正递归调用的参数错误

看代码中第178行的递归调用:

loop2Dir(obj1,obj2,spec1,spec2,opath)

而函数定义是loop2Dir(hist1,hist2,spec1,spec2,n,opath=""),这里少传了n参数,会导致后续参数错位,可能进一步引发路径拼接错误。修正为:

loop2Dir(obj1,obj2,spec1,spec2,n,opath)

额外检查

  • 确认目标路径所在的AFS目录有写入权限:可以先用touch test.txt在目标路径下创建测试文件,验证权限是否正常。
  • 避免硬编码绝对路径,尽量用相对路径或通过os.path.expanduser("~/your_dir")获取用户主目录路径,增强代码兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:35:48