Есть ли способ записи в буфер stdout без очистки в Python? - PullRequest
0 голосов
/ 03 мая 2019

У меня запущены два потока, и оба они выводят некоторый текст на консоль.На одной из них печатаются непрерывные сенсорные данные (каждые 10 секунд), а на другой выводятся обновления статуса из алгоритма анализа (примерно каждый час).

Теперь я хочу, чтобы первый алгоритм обновлял только последнюю строку, чтобы сохранитьвывод в удобочитаемой форме.Я использую параметр end = «\ r» для достижения этой цели, и он работает, как и ожидалось, но иногда, если следующая напечатанная строка из другого потока короче сенсорных данных, остальная часть строки содержит старый мусор данных.

Функция печати в сенсорной нити в настоящее время выглядит следующим образом:

print(str(int(time.time()) % 100) + ": " + str(tickData), end="\r")

Все остальные выходы являются обычными отпечатками без специальных параметров.Вывод выглядит так:

Initializing controller...
Updating database.1834e-06]
Waiting for TPM < Margin
Next target: 1.19e-06
32: [1.186e-06, 1.1834e-06]

Последняя строка обновляется каждые 10 секунд.Проблема может быть замечена во второй строке.

Моя идея состояла в том, чтобы напечатать строку пробелов в буфере, не выводя ее на консоль немедленно, чтобы гарантировать, что перед следующей строкой будет напечатано содержимоелиния будет правильно опорожнена.Поэтому мне нужно было бы записать в буфер stdout, не вызывая сброс, но я не знаю, возможно ли это вообще.Я ничего не нашел в интернете.

Или есть другой способ добиться того, чего я хочу?Я открыт для всех предложений:)

...