我有一個Python腳本。我想在終端輸出內容時保存其結果。我試過
python program.py 2>&1 | tee output.txt
然而,似乎只有在程序完成後,它才會在螢幕上列印所有內容。當它運行時,沒有輸出。這真的很困擾我,因為我想知道運行程式時的進度。有沒有辦法同時輸出到螢幕和檔案?
2019 年 11 月 13 日更新
感謝您的幫助@egmont。遇到相同問題的人可以嘗試以下命令。它將在螢幕上輸出並同時寫入檔案。
stdbuf -oL python program.py 2>&1 | tee ouput.txt
答案1
我遇到了同樣的問題(涉及操作的“任何內容” stdout
- 例如nohup
,背景(&
)或重定向)。對我來說有趣的是,stdbuf -oL
沒有解決問題。但事實證明,Python 2 和 3(我不知道是哪個版本的顛覆,抱歉)都支援-u
makestdout
和stderr
unbuffered 選項。看https://www.commandlinux.com/man-page/man1/python2.7.1.html。
我剛剛注意到(根據該手冊頁)Python 2.7 中stdin
也是無緩衝的,而 Python 3(對我來說是 3.10)的手冊頁明確指出"This option has no effect on the stdin stream."
因此,OP 的原始命令將變為:
python -u program.py 2>&1 | tee output.txt
然後我得到了我所期望的 PHP / awk / 等行為。
正如OP詢問“有什麼方法可以同時輸出到螢幕和文件嗎?”,這個“解決方案”依賴於tee
OP已經推導出來的——它只需要python -u
提供更熟悉的行為。