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

Python调用subprocess.call执行chmod时触发FileNotFoundError问题咨询

问题排查及修复方案

核心报错原因

报错提示No such file or directory: 'sudo': 'sudo',说明你实际运行的代码执行了带sudo前缀的chmod命令(你贴出的代码未包含sudo前缀,需确认代码一致性),当前Python进程的运行环境存在两个可能问题:

  • 系统未安装sudo工具
  • 进程的PATH环境变量未包含sudo/chmod命令的存放目录(通常为/bin或/usr/bin)

修复建议

  • 优先使用绝对路径调用系统命令,避免PATH环境变量异常导致找不到命令:
    无需sudo权限的写法:

    subprocess.call(['/usr/bin/chmod', '0777', actual_file])
    

    需要sudo权限的写法:

    subprocess.call(['/usr/bin/sudo', '/usr/bin/chmod', '0777', actual_file])
    
  • 补全异常捕获逻辑
    当前代码仅捕获cx_Oracle.Error,subprocess调用抛出的异常不会被捕获,建议调整异常捕获范围:

    except (cx_Oracle.Error, OSError) as e:
        print(e)
    
  • 修复文件句柄未关闭问题
    当前代码打开CSV文件后未显式关闭就修改权限,部分系统下文件被占用时修改权限会失败,建议用with上下文管理文件:

    with open(actual_file, "w") as f:
        writer = csv.writer(f)
        writer.writerow(['Old Device id','Old Company','New Item id','New Item','Device Type','New Item IP Address','Status'])
        for x in rows:
            writer.writerow(x)
    # 文件自动关闭后再修改权限
    subprocess.call(['/usr/bin/chmod', '0777', actual_file])
    
  • 修复路径拼接逻辑
    直接用字符串拼接路径容易因为配置项末尾缺失分隔符导致路径错误,建议用os.path.join拼接路径:

    import os
    actual_file = os.path.join(cfg.XFBFolderResponse, response_filename)
    
  • 修复SQL注入风险
    当前SQL直接拼接用户传入的batchid参数,存在SQL注入风险,建议改用参数化查询:

    sql = "SELECT query here WHERE SOME_ID= %s"
    cur.execute(sql, (str(batchid),))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:27:02