more-python/exercises/ex12/tail

46 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python
# Exercise 12f
# tail command
import sys
import argparse
from pathlib import Path
parser = argparse.ArgumentParser()
parser.add_argument("stream", default=sys.stdin, nargs="*")
parser.add_argument("-v", "--verbose", action="store_true")
parser.add_argument("-n", "--lines", default="10", type=str)
args = parser.parse_args()
res = []
def intonum(n):
try:
return abs(int(n))
except ValueError:
print(f"tail: el número de líneas no es válido: «{n}»")
sys.exit(1)
def getlines(lines, n):
lines = list(map(lambda l: l.rstrip(), lines))
num = intonum(n)
if n[0] == "+":
return lines[num-1:]
return lines[-num:]
if isinstance(args.stream, list):
for path in args.stream:
lines = Path(path).open().readlines()
header = [""] if len(res) != 0 else []
if args.verbose:
header += [f"==> {path} <=="]
res += header + getlines(lines, args.lines)
else:
lines = args.stream.readlines()
header = ["==> entrada estándar <=="] if args.verbose else []
res += header + getlines(lines, args.lines)
print("\n".join(res))