#Jonathan Hudson #Student Number 12347890 #Date: 2020-08-26 #Lecture Practice import sys #Enable one of these to 'hack' the arguments #sys.argv = ["3_System_Read_File.py"] #sys.argv = ["3_System_Read_File.py", "-flag"] #sys.argv = ["3_System_Read_File.py", "input.txt"] #sys.argv = ["3_System_Read_File.py", "input.txt", "-flag"] def main(): print("Program start") input_filename, flag = checkArguments() print("Flag: %s" % flag) print("Input filename: %s" % input_filename) lines = open_file(input_filename) print("Contents of %s" % input_filename) for i in range(len(lines)): print("Line %d->%s" % (i, lines[i]) print("Program done") def checkArguments(): print("These are the %d arguments you entered." % len(sys.argv)) print(sys.argv) input_filename = None flag = False #No arguments, will handle getting filename from prompt later if len(sys.argv) == 1: pass #1 Argument get either flag or assume argument is filename elif len(sys.argv) == 2: if(sys.argv[1] == "-flag"): flag = True else: input_filename = sys.argv[1] #More than 2 arguments error and exit else: sys.stderr.write("Too many arguments!\n") sys.stderr.write("Usage: python 3_System_Read_File.py.py\n") sys.stderr.write("Usage: python 3_System_Read_File.py.py \n") sys.stderr.write("Usage: python 3_System_Read_File.py.py -flag\n") sys.exit(1) #Get filename if not in any argument if input_filename == None: input_filename = input("Enter input filename:") return input_filename, flag def open_file(input_filename): #Try to open the file input_file = None try: input_file = open(input_filename, "r") except Exception as e: sys.stderr.write("Exception message %s.\n" % e) sys.stderr.write("Input file %s cannot be opened.\n" % input_filename) sys.exit(2) #If file opens then read in lines and strip white space from right lines = [] try: for line in input_file: lines.append(line.rstrip()) except Exception as e: sys.stderr.write("Exception message %s.\n" % e) sys.stderr.write("Error reading input file %s.\n" % input_file) sys.exit(3) finally: input_file.close() return lines main()