#python #linux #stdout #carriage-return
#python #linux #стандартный вывод #возврат каретки
Вопрос:
Я несколько дней боролся, пытаясь динамически обновлять печатный вывод с помощью возврата каретки. В 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
Как я могу предотвратить это? В моем реальном скрипте я не могу заранее определить, какой будет длина текста, поэтому я не знаю требуемого размера окна консоли.
Спасибо за вашу помощь!
Комментарии:
1. Я предлагаю перенаправить sys.stdout в файл в Linux. Например
python xxx.py > result.txt
2. К сожалению, для меня это не обходной путь, поскольку целью программы является слишком непрерывное отображение этих значений.