Возврат каретки не работает на Linux, если окно консоли слишком мало для текста - PullRequest
0 голосов
/ 09 апреля 2019

В течение нескольких дней я пытался динамически обновлять вывод на печать с использованием возврата каретки. В 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   

Как я могу предотвратить это? В моем реальном сценарии я не могу предопределить, какой будет длина текста, поэтому я не знаю требуемого размера окна консоли.

Спасибо за вашу помощь!

...