簡體   English   中英

將輸出重定向到文件python時,回車符無法正常工作

[英]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

您無法執行此操作,因為重定向會將數據附加到文件末尾。

寫的是書面的。

編輯:但是有解決方法。

第一:更改您的python代碼

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM