SLURM批处理脚本不';t执行Python脚本,不返回任何错误消息,并且不执行';不要停止跑步

SLURM批处理脚本不';t执行Python脚本,不返回任何错误消息,并且不执行';不要停止跑步,python,slurm,Python,Slurm,在SLURM集群中,我提交了一个调用python脚本的shell脚本(下面可以找到这两个脚本。当shell脚本执行它时,直到调用python脚本为止,但什么也没有发生:没有输出,没有错误消息,SLURM作业一直在运行 我假设python脚本的全部内容都不相关(但我还是包含了它以供完成)。出于调试目的,我在最开始插入了打印(“脚本已启动”)行,以查看它是否运行,但它没有运行。我在输出中看到的最后一件事是移动到目录 在此之前,我尝试调用一个test.py脚本,该脚本包含print(“test”),并

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

我假设python脚本的全部内容都不相关(但我还是包含了它以供完成)。出于调试目的,我在最开始插入了
打印(“脚本已启动”)
行,以查看它是否运行,但它没有运行。我在输出中看到的最后一件事是
移动到目录

在此之前,我尝试调用一个
test.py
脚本,该脚本包含
print(“test”)
,并正常执行

python脚本无法启动的原因可能是什么?如何修复它

编辑:根据用户jakub的建议,将
打印(“脚本启动”)
更改为
打印(“脚本启动”,flush=True)
已成功打印。再加上几个这样的语句表明脚本实际上运行得非常好,只是没有输出任何内容。在for循环中包含不断执行的同一语句也会使以前丢失的所有
print()
语句都被打印出来

然后问题就变成了:为什么这里的
print()
语句需要在这个脚本中有
flush=True
,而在其他脚本中没有

Shell脚本:

!/bin/bash
#SBATCH——邮件用户=lukas。baehler@pathology.unibe.ch
#SBATCH--邮件类型=结束,失败
#SBATCH—输出=输出ncl
#SBATCH--error=err ncl
#SBATCH--作业名称=“面罩RCNN nucleus培训和检测”
#SBATCH--时间=24:00:00
#SBATCH--partition=gpu
#SBATCH--每个cpu的内存=64G
#SBATCH--gres=gpu:gtx1080ti:1
#SBATCH--约束=rtx2080
康达初始化bash
source~/.bashrc
康达激活核
cd-MRCNN/samples/nucleus
echo“移动到目录”
python nucleus-pipeline2.py splitTMA
回声“分割TMA”
Python脚本:


打印(“脚本已启动”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
导入argparse
导入操作系统
#由于argparse部分已向上移动,因此在脚本中从后面复制
#需要作为--logs中的默认值。
ROOT_DIR=os.path.abspath(“../”)
默认的\u LOGS\u DIR=os.path.join(ROOT\u DIR,“LOGS”)
#解析命令行参数
parser=argparse.ArgumentParser(
description='Mask R-CNN用于核计数和分割')
parser.add_参数(“command”,
metavar=“”,
help=“'splitTMA'、'splitSpot'、'structure'、'train'或'detect'”)
parser.add_参数('--dataset',required=False,
metavar=“/path/to/dataset/”,
help='dataset的根目录')
parser.add_参数('--weights',required=False,
metavar=“/path/to/weights.h5”,
help=“weights.h5文件或“coco”的路径”
parser.add_参数('--logs',required=False,
默认值=默认值\u日志\u目录,
metavar=“/path/to/logs/”,
help='Logs and checkpoints目录(默认值=Logs/)')
parser.add_参数('--subset',required=False,
metavar=“数据集子目录”,
help=“要运行预测的数据集子集”)
#自己的论点
parser.add_参数(“--input”,required=False,
metavar=“path/to/input/folder”,
help=“可选指定输入目录。应仅与splitTMA、splitSpot和structure一起使用。”)
parser.add_参数(“--output”,required=False,
metavar=“path/to/output/folder”,
help=“可选指定输出目录。应仅与splitTMA、splitSpot和structure一起使用。”)
args=parser.parse_args()
在[“列车”、“检测”、“拆分TMA”、“拆分点”、“结构”]、“必须设置命令”中断言args.command
################################################################################
#斯普利特玛
################################################################################
#这个的原始脚本是tma-spot.py
#将TMA拆分为其斑点的图像。
如果args.command==“splitTMA”:
导入操作系统
进口cv2
将numpy作为np导入
从openslide导入OpenU幻灯片
从matplotlib导入pyplot作为plt
###################
#配置
#定义点识别的分辨率级别
级别=7#默认为7
#定义用于新图像的分辨率级别
newLevel=0#默认值为0(最高分辨率)
#以像素为单位定义光斑大小(如果更改了newLevel,则必须更改)
SpotSize=3072#默认值3500
##Shift值用于对齐两张幻灯片。
#shiftX=445-10
#shiftY=-64+10
打印(“使用以下参数:\nlevel={}\nnewLevel={}\nSpotSize={}”。格式(level,newLevel,SpotSize))
###################
#NUCLEUS_DIR=“MRCNN/samples/NUCLEUS”
NUCLEUS_DIR=os.path.abspath(“”)
os.chdir(NUCLEUS\u DIR)
如果args.input:
INPUT_DIR=args.INPUT
其他:
INPUT_DIR=“幻灯片”
打印(“使用“{}”作为输入文件夹。”.format(input_DIR))
如果args.output:
OUTPUT_DIR=args.OUTPUT
其他:
输出\u DIR=“点”
打印(“使用“{}”作为输出文件夹。”.format(输出目录))
#mrxs_filenames=[如果文件名[-5::][=”.mrxs“],则为os.listdir(“幻灯片”)中文件名的文件名]
mrxs_filenames=[如果文件名[-5::][=”.mrxs“],则os.listdir(输入_DIR)中文件名的文件名]
打印(“\n查找{}MIRAX文件。”.format(len(mrxs_文件名)))
#瞧