![](/img/trans.png)
[英]Python - Replace newline with return carriage/newline in file output
[英]Carriage return doesnt work properly when redirecting output to file python
我有這個簡單的代碼,其中每個迭代都覆蓋上一行的輸出:
import time
for i in reversed(range (12)):
print i, '\r',
time.sleep(0.2)
當我使用以下命令運行腳本: python test.py
我看到輸出正在按預期每次迭代進行替換。 但是,當我使用以下命令將輸出重定向到文件時:
python test.py >> tmp.txt
我得到一個包含12個單獨行中所有12個數字的文件。
如何在輸出文件中獲得與從命令行運行腳本相同的最終結果?
我在Windows 10上使用python 2.6.5
您無法執行此操作,因為重定向會將數據附加到文件末尾。
寫的是書面的。
編輯:但是有解決方法。
import time,sys
interactive = sys.stdout.isatty()
for i in reversed(range (12)):
if i==0 or interactive:
print i, '\r',
time.sleep(0.2)
重定向到文件時,它將僅顯示0
。 如果在沒有重定向的情況下運行,它將執行與以前相同的操作。
如果您正在運行安裝了MSYS的Linux或Windows,只需將輸出通過管道傳遞給cat
這樣的命令
python test.py | cat >> tmp.txt
僅0
將回顯到文件
當您從命令行運行腳本時,終端會解釋\\r
字符並將光標移至該行的開頭。 Python腳本輸出中的實際字節相同。 您可以使用cat tmp.txt
通過終端“重播”文件,以達到與交互式運行腳本時幾乎相同的效果。 但是看來您真正想要的並不能如此簡單地完成。
要重寫已經寫入輸出文件的字節,請關閉並重新打開它,或者在下一次寫入之前將seek()
返回到開頭。
不用說,如果您當前沒有文件,而只有文件句柄(如標准輸出),則對程序進行的必要更改是相當麻煩的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.