使用sbatch运行Slurm作业时输出文件回车符无效
解决Slurm作业中Python回车符(\r)输出异常的问题
核心原因
Python在非终端环境(比如Slurm作业)下默认启用输出缓冲,导致\r(回车符)的行覆盖效果无法实时生效,最终所有中间输出都被保留到out.txt里。
具体解决办法
强制Python无缓冲输出
运行脚本时加上-u参数关闭缓冲:python -u test.py或者在job.sh里先设置环境变量:
export PYTHONUNBUFFERED=1 python test.py修正Python的print语句
把手动拼接\r和end=''的写法改成直接指定end='\r',避免冗余和缓冲问题:print(message, end='\r')用stdbuf强制行缓冲
在job.sh里用stdbuf命令强制输出按行缓冲,让Slurm能正确识别\r:stdbuf -oL python test.py > out.txt后期清理已生成的out.txt
如果已经得到包含冗余行的输出文件,用sed命令处理,只保留每行最后一次覆盖的内容:sed -n '/\r/{:a;N;s/\n.*\r//;ba};p' out.txt > cleaned_out.txt
内容的提问来源于stack exchange,提问作者user1506145
相关产品推荐
相关产品推荐

