同時將程式輸出重定向到螢幕和文件

同時將程式輸出重定向到螢幕和文件

我有一個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(我不知道是哪個版本的顛覆,抱歉)都支援-umakestdoutstderrunbuffered 選項。看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詢問“有什麼方法可以同時輸出到螢幕和文件嗎?”,這個“解決方案”依賴於teeOP已經推導出來的——它只需要python -u提供更熟悉的行為。

相關內容