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