Linux中将 python 程序运行结果记录到文件中的方法

https://www.cnblogs.com/shineriver/p/10922970.html

  1. 仅转向不显示
    (1)ls > test.txt 把输出转向到指定的文件,如文件已存在的话也会重新写入,文件原内容不会保留
    (2)ls >> test.txt 是把输出附向到文件的后面,文件原内容会保留下来

  2. 转向同时显示(这个似乎更好,可以多用这个)
    ls | tee ls_tee.txt 把输出转向到指定的文件,同时显示,原文件内容不保存
    ls | tee -a ls_tee.txt 把输出转向到指定的文件,同时显示,原文件内容保存,输出附在原文件内容后面

  3. tee的作用:
      read from standard input and write to standard output and files
      它从标准输入读取内容并将其写到标准输出和文件中

关于 tee 命令的进一步详细解释


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 换行了,就有效。