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

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

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

我尝试在此之前调用test.py包含的脚本print("test")并且它正常执行。

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

编辑:由于用户 jakub 建议更改print("script started")print("script started", flush=True)成功打印。包括更多这样的语句表明脚本实际上运行得很好,只是没有输出任何东西。在不断执行的 for 循环中包含相同的语句也会使print()之前丢失的所有语句都被打印出来。

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


青春有我
浏览 367回答 1
1回答

叮当猫咪

Python 默认缓冲 stdin、stdout 和 stderr。print()默认情况下写入stdout,因此您将看到这种缓冲行为。Python 以缓冲模式打开 stdin、-out 和 -error 流;它将读取或写入更大的块,将数据保存在内存中,直到达到阈值。您可以通过传递flush=True给强行刷新此缓冲区print。print如果连续有多个语句,则只需flush=True在最后一个语句中使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python