Как обрезать файл журнала csv, который используется в качестве места назначения std out pipe из другого процесса, не генерируя ошибку _csv.Error: line contains NULL byte
?
У меня работает один процесс rtlamr > log/readings.txt
, который передает радиосигнал данные до readings.txt
. Я не думаю, что имеет значение, что передается в файл - подойдет любой длительный процесс конвейера.
У меня есть средство просмотра файлов, использующее для этого файла watchdog
(Python наблюдатель файла), который запускает функцию при изменении файла. Функция читает файлы и обновляет базу данных.
Затем я пытаюсь усечь readings.txt
, чтобы она не росла бесконечно (или не создавала резервные копии).
file = open(dir_path+'/log/readings.txt', "w")
file.truncate()
file.close()
Это повреждает readings.txt
и генерирует ошибку (в начале файла содержатся символы мусора).
Я попытался переместить файл вместо его усечения, в надежде, что rtlamr
воссоздает файл fre sh, но это только приводит к остановке канала.
РЕДАКТИРОВАТЬ Я заметил, что кодировка меняется с us-ascii
на binary
, но попытка обрезать файл с помощью file = open(dir_path+'/log/readings.log', "w",encoding="us-ascii")
ничего не делает.