我正在运行一个包含通过SLURM打印语句的Python代码.通常当我通过"python program.py"直接运行Python代码时,print语句出现在终端中.当我通过SLURM运行我的程序时,正如预期的那样,打印语句不会出现在终端中.如何将打印语句保存到文件中,以便在程序运行时检查它们?以下是我通过"sbatch submit.sh"提交的提交脚本.请注意,我已经尝试了两种方法将输出写入test1.out或test2.out.请让我知道我哪里出错了!
#!/bin/bash
#SBATCH -J mysubmission
#SBATCH -p New
#SBATCH -n 1
#SBATCH -t 23:59:00
#SBATCH -o test1.out
module load gnu python
python program.py > test2.out
Run Code Online (Sandbox Code Playgroud)
你可以把
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
在打印兴趣声明之后。或者从 python 3.3 开始
print("hey", flush=True)
Run Code Online (Sandbox Code Playgroud)
是一个选项。python -u如果您频繁打印,尤其是在共享文件系统上,使用无缓冲 IO(与)可能会降低性能。
小智 8
您可以使用:
python -u program.py > test2.out
Run Code Online (Sandbox Code Playgroud)
并且您的所有输出都将保存到 test2.out 文件中。
默认情况下,print在Python中是缓冲的,这意味着它不会立即写入文件或stdout,需要“刷新”以强制立即写入stdout。
有关可用选项,请参见此问题。
最简单的选项是使用该-u选项启动Python解释器。
从python手册页:
-u强制完全禁止stdin,stdout和stderr。在重要的系统上,还将stdin,stdout和stderr置于二进制模式。请注意,xreadlines(),readlines()和文件对象迭代器(“用于sys.stdin中的行”)具有内部缓冲,不受此选项的影响。要解决此问题,您将需要在“ while 1:”循环内使用“ sys.stdin.readline()”。
| 归档时间: |
|
| 查看次数: |
3618 次 |
| 最近记录: |