import argparse import sys import os # Kommandozeilenoptionen festlegen parser = argparse.ArgumentParser(description='Einfache Caesar-Verschleierung') parser.add_argument('-k', '--key', nargs=1, type=int, help="Schlüssel, zwischen -25 und 25", required=True) parser.add_argument('-i', '--infile', type=str, help="Optional: Datei, wovon gelesen werden soll.") parser.add_argument('-o', '--outfile', type=str, help="Optional: Datei, wohin das Resultat geschrieben werden soll.") parser.add_argument('-f', '--force', action="store_true", help="Output-Datei wird überschrieben, falls sie schon existiert"); # Auswerten args = parser.parse_args() # Schlüssel bestimmen key = args.key[0] if (key<-25 or key>25): sys.stderr.write("Der Schlüssel muss zwischen -25 und 25 liegen\n") exit(-1) # Programm mit Fehlerstatus beenden # Text von Datei oder Standardinput lesen text = "" # Input Datei gegeben? if args.infile: # Datei öffnen und einlesen (r für read) if not os.path.exists(args.infile): sys.stderr.write(f"Input Datei {args.infile} nicht gefunden\n") exit(-1) with open(args.infile, "r") as f: text = f.read() else: # sonst vom Standard-Input lesen text = sys.stdin.read() # Verschleierung result = "" for symbol in text: if symbol>='A' and symbol<='Z': symbol = chr(ord(symbol)+ord('a')-ord('A')) if symbol>='a' and symbol<='z': nummer = ord(symbol)+key if nummerord('z'): nummer = nummer-26 symbol = chr(nummer) result = result + symbol # Resultat in Datei oder Standard Output ausgeben if args.outfile: if (os.path.exists(args.outfile)) and (not args.force): sys.stderr.write(f"Die Datei {args.outfile} existiert bereits. Benutzen Sie -f um diese zu überschreiben\n") exit(-1) # Datei überschreiben und ausgeben (w für write) with open(args.outfile, "w") as f: f.write(result) else: # Sonst ausgabe auf Standard Ouput sys.stdout.write(result) # Fast das gleiche wie print(result), ausser dass print immer einen Zeilenumbruch hinzufügt.