#------------------------------------------------------------------------------ # # Copy.py # Demonstration of how to adjust program operation so as to depend on command # line options. Copies a list of files to stdout or to another file, depending # what is found on the command line. See examples below. # # $ python3 Copy.py file1 file2 .. # copies files to stdout # $ python3 Copy.py -o outfile file1 file2 .. # copies files to outfile # # The -o option will overwrite outfile if it exists, and otherwise creates # outfile. All other command line combinations cause the program to print # a usage message to stderr, then quit. # #------------------------------------------------------------------------------ import sys # usage() # Prints error messages to stderr def usage(): print("Usage: $ python3 Copy.py [-o ] file1 file2 ..", file=sys.stderr) exit() # end def main(): if len(sys.argv)==1: usage() elif sys.argv[1]=="-o" and len(sys.argv)==2: usage() elif sys.argv[1]=="-o": out = open(sys.argv[2], 'w') # open file in mode 'w' write files = sys.argv[3:] else: out = sys.stdout files = sys.argv[1:] # end s = "" for name in files: try: f = open(name) # default open mode is 'r' read except FileNotFoundError as e: print(e, file=sys.stderr) usage() # end content = f.read() # reads entire file as one string s += content # end # now print everything to output file or to stdout print(s, file=out) # end #------------------------------------------------------------------------------ if __name__=='__main__': main() # end