linux下把 python 程序運行的輸出結果記錄到 log 文件中


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM