linux下把 python 程序运行的输出结果记录到 log 文件中
Linux中将 python 程序运行结果记录到文件中的方法
https://www.cnblogs.com/shineriver/p/10922970.html
-
仅转向不显示
(1)ls > test.txt 把输出转向到指定的文件,如文件已存在的话也会重新写入,文件原内容不会保留
(2)ls >> test.txt 是把输出附向到文件的后面,文件原内容会保留下来 -
转向同时显示(这个似乎更好,可以多用这个)
ls | tee ls_tee.txt 把输出转向到指定的文件,同时显示,原文件内容不保存
ls | tee -a ls_tee.txt 把输出转向到指定的文件,同时显示,原文件内容保存,输出附在原文件内容后面 -
tee的作用:
read from standard input and write to standard output and files
它从标准输入读取内容并将其写到标准输出和文件中
Linux 中 > 跟 >> 区别,2>&1 是什么?
https://blog.csdn.net/junge1545/article/details/80838554
个人测试 '>', 感觉有时候可能会出现问题,没有同步写,而是在出现了很多行之后,buffer满了后才往里面写这些行。
有时候,使用 txt 文件写的时候也有可能出现问题,根本没有生成文件,也没有往里面写,LDAM 出现此问题。
### DIEN 的代码 run.sh ###
CUDA_VISIBLE_DEVICES=0 /usr/bin/python2.7 script/train.py train DIEN >train_dein2.log 2>&1 &
#############
将命令正确执行和错误的输出结果都保存到文件 result.log
python class.py 2>&1 | tee result.log
# 注意如果用 python class.py | tee result.log 2>&1 似乎无效
参考博客 sys.stdout.flush的作用
- py3 如果缓冲区的内容中新增了换行符,那么 stdout 就会自动将缓冲区内的内容输出
- 如果 print 语句没有换行符,在 python2.x 中,则会存在 buffer 中不输出,此时就轮到 sys.stdout.flush() 出场了
- DIEN 就是用这个 sys.stdout.flush() 解决此问题。
- py2.7 中加上换行 "\n", 仍然没有效果,还是需要使用 sys.stdout.flush() 才能实时刷新。
- py3 不存在这问题,只要 print 换行了,就有效。