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() |