#!/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))