В течение нескольких дней я пытался динамически обновлять вывод на печать с использованием возврата каретки. В Windows все работало нормально, но в Linux все время печатались новые строки. Я протестировал все различные решения, предоставленные в stackoverflow, но ни одно из них не сработало. В конце концов я узнал, что все зависит от размера окна терминала Linux! Смотрите следующий код:
import numpy as np
import sys
def printing():
while True:
sys.stdout.write('\r%.8g %s'%(np.random.rand(), 'test '))
sys.stdout.flush()
printing()
В Windows (Spyder) вы получаете ожидаемый результат, а именно, что печатается и обновляется только одна строка.
В Linux это, кажется, зависит от размера окна консоли, потому что, если окно достаточно велико, чтобы в него помещалась вся строка, то эта строка корректно обновляется. Однако, если я сделаю окно настолько маленьким, что текст будет частично в новой строке, то скрипт сделает это:
0.81887604 test
0.93397997 test
0.67231912 test
0.83398159 test
0.26675238 test
0.64693328 test
0.12057606 test
0.17320486 test
0.42479957 test
0.12575117 test
0.18562281 test
Как я могу предотвратить это? В моем реальном сценарии я не могу предопределить, какой будет длина текста, поэтому я не знаю требуемого размера окна консоли.
Спасибо за вашу помощь!