Je lis des données de gpsd et je les écris à l'aide du module de journalisation de Python. Je suis assez confiant qu'un seul processus écrit dans ce fichier, bien que je le lise en utilisant tail alors que ce logger est en cours d'exécution. De temps en temps, je vois des entrées de journal qui ressemblent à l'image ci-dessous. J'espère que quelqu'un peut faire la lumière sur ce qui causerait (probablement Python) d'insérer des caractères de contrôle null dans mon fichier journal.Enregistreur Python insérant des caractères de contrôle null (^ @) dans le fichier
Le code J'utilise est:
"""
Read the GPS continuously
"""
import logging
from logging.handlers import RotatingFileHandler
import sys
import gps
LOG = '/sensor_logs/COUNT.csv'
def main():
log_formatter = logging.Formatter('%(asctime)s,%(message)s', "%Y-%m-%d %H:%M:%S")
my_handler = RotatingFileHandler(LOG, mode='a', maxBytes=1024*1024,
backupCount=1, encoding=None, delay=0)
my_handler.setFormatter(log_formatter)
my_handler.setLevel(logging.INFO)
app_log = logging.getLogger('root')
app_log.setLevel(logging.INFO)
app_log.addHandler(my_handler)
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
while True:
try:
report = session.next()
if hasattr(report, 'gdop'):
satcount = 0
for s in report['satellites']:
if s['used'] == True:
satcount+=1
data = "{}".format(str(satcount))
app_log.info(data)
except KeyError:
pass
except KeyboardInterrupt:
quit()
except StopIteration:
session = None
if __name__ == "__main__":
main()
Je ne vois que la commande qui écrit dans le journal. Donc, je ne suis pas sûr d'où viennent ces octets. Est-il possible que vous ayez un autre travail d'écriture sur le même enregistreur? Que se passe-t-il si vous changez le nom du journal en autre chose que 'root' et en un nom de fichier différent au cas où? – RobertB
J'apprécie que vous reveniez à moi, @RobertB. Je peux essayer ce que tu proposes. Ce bug est difficile à reproduire. Il faudra encore un certain temps avant que je puisse creuser de nouveau. Je rapporterai si et quand je découvre ce qui cause le problème que j'ai décrit. – dps