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