在 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,而在其他脚本中不需要呢?
1 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
Python 默认缓冲 stdin、stdout 和 stderr。print()
默认情况下写入stdout
,因此您将看到这种缓冲行为。
Python 以缓冲模式打开 stdin、-out 和 -error 流;它将读取或写入更大的块,将数据保存在内存中,直到达到阈值。
您可以通过传递flush=True
给强行刷新此缓冲区print
。print
如果连续有多个语句,则只需flush=True
在最后一个语句中使用。
添加回答
举报
0/150
提交
取消