Statistiques
| Branche: | Tag: | Révision :

dockonsurf / modules / utilities.py @ f8c4eafe

Historique | Voir | Annoter | Télécharger (749 octet)

1
def tail(f, lines=20):
2
    total_lines_wanted = lines
3

    
4
    block_size = 1024
5
    f.seek(0, 2)
6
    block_end_byte = f.tell()
7
    lines_to_go = total_lines_wanted
8
    block_number = -1
9
    blocks = []
10
    while lines_to_go > 0 and block_end_byte > 0:
11
        if block_end_byte - block_size > 0:
12
            f.seek(block_number * block_size, 2)
13
            blocks.append(f.read(block_size))
14
        else:
15
            f.seek(0, 0)
16
            blocks.append(f.read(block_end_byte))
17
        lines_found = blocks[-1].count(b'\n')
18
        lines_to_go -= lines_found
19
        block_end_byte -= block_size
20
        block_number -= 1
21
    all_read_text = b''.join(reversed(blocks))
22
    return b'\n'.join(all_read_text.splitlines()[-total_lines_wanted:]).decode()