Как повторно прочитать файл из последней локации - PullRequest
3 голосов
/ 14 августа 2011

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



    lf = open("location.file", 'r')
    s = lf.readline()
    last_pos = int(s.strip())
    lf.close()

    sl = open("/var/log/messages", 'r')
    sl.seek(last_pos)
    for line in sl.readlines():
         # This should be the starting point from the last read
    last_loc = sl.tell()

    lf = open("location.file", "w+")
    lf.write(last_loc)
    lf.close()


Ответы [ 2 ]

3 голосов
/ 14 августа 2011
  1. Запись str(last_loc) вместо last_loc.

    Остальные, вероятно, являются необязательными.

  2. Используйте w вместо w+ длязапись местоположения.
  3. Закройте /var/log/messages, когда вы закончите.
  4. В зависимости от вашей версии Python (определенно на 2.6 или новее, может быть на 2.5 в зависимости), вы можете захотетьиспользовать with для автоматического закрытия файлов.
  5. Возможно, вам не понадобится strip, если вы просто пишете значение.
  6. Вы можете просто использовать read вместо readline на lf.
  7. Вы можете перебирать сам файл, вместо использования readlines для sl.

    try:
        with open("location.file") as lf:
            s = lf.read()
            last_pos = int(s)
    except:
        last_post = 0
    
    with open("/var/log/messages") as sl:
        sl.seek(last_pos)
        for line in sl:
            # This should be the starting point from the last read
        last_loc = sl.tell()
    
    with open("location.file", "w") as lf:
        lf.write(str(last_loc))
    
0 голосов
/ 14 августа 2011

Ваша читалка выглядит странно.Вам нужно либо:

1) сохранить значение в виде строки и проанализировать его:

lf.write(str(last_loc))

2) сохранить и перечитать местоположение как int:

lf.write(struct.pack("Q",lf.tell()))
last_pos = struct.unpack("Q",lf.read())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...