From 3787db0fe3dcc8962eceeb3556e9b91825d9f067 Mon Sep 17 00:00:00 2001 From: perro Date: Wed, 15 Mar 2023 09:53:55 -0700 Subject: [PATCH] Ejercicios 12f-h --- exercises/ex12/false | 7 +++++++ exercises/ex12/tail | 45 ++++++++++++++++++++++++++++++++++++++++++++ exercises/ex12/yes | 12 ++++++++++++ 3 files changed, 64 insertions(+) create mode 100755 exercises/ex12/false create mode 100755 exercises/ex12/tail create mode 100755 exercises/ex12/yes diff --git a/exercises/ex12/false b/exercises/ex12/false new file mode 100755 index 0000000..7cd6371 --- /dev/null +++ b/exercises/ex12/false @@ -0,0 +1,7 @@ +#!/usr/bin/env python +# Exercise 12h +# false command + +import sys + +sys.exit(1) diff --git a/exercises/ex12/tail b/exercises/ex12/tail new file mode 100755 index 0000000..bb5f899 --- /dev/null +++ b/exercises/ex12/tail @@ -0,0 +1,45 @@ +#!/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)) diff --git a/exercises/ex12/yes b/exercises/ex12/yes new file mode 100755 index 0000000..bba45e5 --- /dev/null +++ b/exercises/ex12/yes @@ -0,0 +1,12 @@ +#!/usr/bin/env python +# Exercise 12g +# yes command + +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument("words", nargs="*", type=str, default=["y"]) +args = parser.parse_args() + +while True: + print(" ".join(args.words))