SLURM批处理脚本不执行Python脚本,不返回错误消息,并且不会停止运行

时间:2020-08-14 14:04:52

标签: python slurm

在SLURM集群中,我正在提交一个调用python脚本的shell脚本(这两个脚本都可以在下面找到。当执行shell脚本时,直到调用python脚本为止,然后什么都没有发生:没有输出,没有错误消息,并且SLURM作业继续运行。

我假设python脚本的所有内容都不相关(但我还是将其包括在内以完成操作)。出于调试目的,我在开始时插入了print("script started")行,以查看它是否可以运行但没有运行。我在输出中看到的最后一件事是moved to directory

我尝试在此之前调用包含test.py的{​​{1}}脚本,该脚本可以正常执行。

python脚本无法启动的原因可能是什么,我该如何解决?

编辑:由于jakub用户建议成功将print("test")更改为print("script started"),因此需要打印。包括另外几条这些语句表明该脚本实际上运行得很好,只是没有输出任何内容。在for循环中包含不断执行的同一条语句,也会使以前缺少的所有print("script started", flush=True)条语句得到打印。

然后问题变成:为什么这里的print()语句需要在此脚本中有print(),而在其他脚本中没有{}?

Shell脚本:

flush=True

Python脚本:

#!/bin/bash
#SBATCH --mail-user=lukas.baehler@pathology.unibe.ch
#SBATCH --mail-type=end,fail
#SBATCH --output=out-ncl
#SBATCH --error=err-ncl
#SBATCH --job-name="Mask RCNN nucleus training and detection"

#SBATCH --time=24:00:00
#SBATCH --partition=gpu
#SBATCH --mem-per-cpu=64G

#SBATCH --gres=gpu:gtx1080ti:1
#SBATCH --constraint=rtx2080


conda init bash
source ~/.bashrc
conda activate nucl

cd MRCNN/samples/nucleus
echo "moved to directory"

python nucleus-pipeline2.py splitTMA
echo "Split TMAs"

1 个答案:

答案 0 :(得分:0)

Python默认情况下会缓冲stdin,stdout和stderr。 print()默认情况下写入stdout,因此您将看到此缓冲行为。

来自https://stackoverflow.com/a/14258511/5666087

Python以缓冲模式打开stdin,-out和-error流;它会读取或写入更大的块,将数据保留在内存中,直到达到阈值为止。

您可以通过将flush=True传递到print来强制刷新此缓冲区。有关更多信息,请参见the documentation。如果连续有多个print语句,则只需在最后一个语句中使用flush=True