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

使用sbatch执行Python脚本时subprocess无法找到tcsh脚本路径

问题:Slurm调度执行Python脚本时无法找到tcsh脚本

我有一个Python脚本startup.py,通过subprocess.call()调用tcsh脚本test.sh。在集群主目录直接执行Python脚本时一切正常,但使用sbatch提交Slurm任务时失败,提示找不到目标脚本。

相关文件信息

Python脚本 startup.py(路径:/home/myname/anaconda/pro/myPy/startup.py)

mycomp='/home/myname/'

import compileall
compileall.compile_dir(mycomp+'anaconda/pro/myPy/', force=1)

import subprocess as subs
subs.call(mycomp+'anaconda/pro/myRun/test.sh', shell=True)

tcsh脚本 test.sh(路径:/home/myname/anaconda/pro/myRun/test.sh)

脚本开头为#!/bin/tcsh,具备可执行权限:

-rwxr-xr-x 1 myname myname 80891 abr  4 18:32 test.sh

Slurm脚本 config.sh(版本:slurm 0.4.3,路径:/home/myname/config.sh)

#!/bin/sh

#SBATCH -A 16cores
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=16
#SBATCH --job-name=300
#SBATCH --error=300.err
#SBATCH --output=300.out
#SBATCH --partition=all
#SBATCH --time=60-00:00:00

export OMP_NUM_THREADS=16

### 切换到工作目录;
cd ~/anaconda/pro/myPy/

### 运行:
python startup.py

执行命令与错误信息

执行命令:

myname@mycluster:~$ sbatch config.sh

300.err中的错误内容:

/bin/sh: 1: /home/myname/anaconda/pro/myRun/test.sh: not found

可能的原因及解决办法

  • 计算节点上tcsh解释器路径不对
    错误提示的“not found”常被误解为脚本不存在,但实际可能是脚本开头指定的#!/bin/tcsh在Slurm调度的计算节点上找不到。登录到任意计算节点执行which tcsh,得到实际路径后替换test.sh开头的解释器路径,比如改为#!/usr/bin/tcsh。

  • 目标目录在计算节点未挂载
    集群主目录或/home/myname/anaconda/pro/myRun/可能未在计算节点上正确挂载,导致脚本不可访问。可以在Slurm脚本的python startup.py前添加ls /home/myname/anaconda/pro/myRun/test.sh命令,验证是否能找到文件;若确实无法访问,联系集群管理员确认目录挂载配置。

  • subprocess调用的shell环境差异
    直接执行Python脚本时用的是tcsh环境,而Slurm脚本使用#!/bin/sh作为默认shell,环境差异可能引发路径解析问题(即使使用绝对路径)。建议修改subprocess.call的调用方式,显式指定tcsh解释器并避免shell=True,更可靠的写法:

    subs.call(['tcsh', mycomp+'anaconda/pro/myRun/test.sh'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:26:19