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

dockonsurf / modules / utilities.py @ f8c4eafe

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

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