Как мне получить мой python скрипт, который непрерывно распечатывает данные для вывода в текстовый файл с ограничением по строкам вместо стандартного терминала? - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно только разрешить файлу содержать 5000 строк данных перед удалением самых старых данных, поскольку сценарий python выводит новые данные (аналогично 'команде хвоста в bash'). Я хотел бы иметь возможность наблюдать за данными, поскольку они генерируются, просматривая текстовый файл, в который выводит скрипт. Мне нужно, чтобы он мог работать в фоновом режиме без необходимости активности терминала или, в данном случае, сеанса s sh. В начале сценария python, который выводит все данные, я пробовал что-то вроде:

import sys
sys.stdout = open(tail -c 1G > 'output.txt', 'w', buffering=1)

Но безрезультатно. Я не против того, чтобы сценарий bash обрабатывал файл python, но я бы предпочел просто запустить сценарий python и по возможности направить его вывод в отдельный файл, как указано выше.

1 Ответ

0 голосов
/ 08 мая 2020

Вы описываете кольцевой буфер , который не является структурой данных, которая может поддерживаться файлом. Файлы могут быть записаны (перезаписывая некоторое существующее содержимое) или добавлены к ним, но невозможно сдвинуть байты ранее в файле. Команды, которые выглядят так, как они делают это, обычно записывают во временный файл, а затем копируют содержимое обратно в исходный файл.

Как предложил @Luv, типичный подход к «сохранению последнего * «1007 * n строк данных на диск» - это чередование нескольких файлов . Вы можете сделать это в Python (их предложение использовать RotatingFileHandler кажется разумным) или в Bash, например, с rotatelogs.

...