DeaD_EyE

beispiel

Apr 20th, 2020
336
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python3
  2.  
  3. """
  4. Das Programm gibt die letzten [n] Zeichen von stdin als Großbuchstaben aus.
  5. """
  6. import io
  7. import os
  8. import sys
  9. from argparse import ArgumentParser
  10. from pathlib import Path
  11.  
  12.  
  13. def last_upper(n, file):
  14.     """
  15.    Gibt die letzten n Zeichen von stdin als Großbuchstaben aus.
  16.    """
  17.     n = -n
  18.     stdin = io.TextIOWrapper(sys.stdin.buffer, encoding="cp850")
  19.     if not os.isatty(stdin.fileno()):
  20.         data = stdin.read()
  21.     elif file:
  22.         for encoding in ("ascii", "utf8", "utf16", "latin1"):
  23.             try:
  24.                 data = file.read_text(encoding)
  25.             except UnicodeDecodeError:
  26.                 continue
  27.             else:
  28.                 break
  29.     else:
  30.         raise RuntimeError("Falls stdin nicht verwendet wird, muss eine Datei angegeben werden.")
  31.     try:
  32.         return data.rstrip().upper()[n:]        
  33.     except NameError:
  34.         raise RuntimeError("Konnte keine passende encodierung finden.")
  35.  
  36.  
  37. if __name__ == "__main__":
  38.     parser = ArgumentParser(__doc__)
  39.     parser.add_argument("--n", type=int, default=1, help="Anzal der letzten Zeichen des Strings, der ausgegeben werden soll")
  40.     parser.add_argument("--r", type=Path, default=None, help="Datei, die eingelesen werden soll.")
  41.     args = parser.parse_args()
  42.     try:
  43.         print(last_upper(args.n, args.r))
  44.     except RuntimeError as e:
  45.         print(e, file=sys.stderr)
  46.         sys.exit(1)
  47.     except UnicodeDecodeError as e:
  48.         print(e, file=sys.stderr)
RAW Paste Data