# tee.py # Purpose: A Python class with a write() method which, when # used instead of print() or sys.stdout.write(), for writing # output, will cause output to go to both sys.stdout and # the filename passed to the class's constructor. The output # file is called the teefile in the below comments and code. # The idea is to do something roughly like the Unix tee command, # but from within Python code, using this class in your program. # The teefile will be overwritten if it exists. # The class also has a writeln() method which is a convenience # method that adds a newline at the end of each string it writes, # so that the user does not have to. # Python's string formatting language is supported (without any # effort needed in this class), since Python's strings support it, # not the print method. # Author: Vasudev Ram # Web site: https://vasudevram.github.io # Blog: https://jugad2.blogspot.com # Product store: https://gumroad.com/vasudevram from __future__ import print_function import sys from error_exit import error_exit class Tee(object): def __init__(self, tee_filename): try: self.tee_fil = open(tee_filename, "w") except IOError as ioe: error_exit("Caught IOError: {}".format(repr(ioe))) except Exception as e: error_exit("Caught Exception: {}".format(repr(e))) def write(self, s): sys.stdout.write(s) self.tee_fil.write(s) def writeln(self, s): self.write(s + '\n') def close(self): try: self.tee_fil.close() except IOError as ioe: error_exit("Caught IOError: {}".format(repr(ioe))) except Exception as e: error_exit("Caught Exception: {}".format(repr(e))) def main(): if len(sys.argv) != 2: error_exit("Usage: python {} teefile".format(sys.argv[0])) tee = Tee(sys.argv[1]) tee.write("This is a test of the Tee Python class.\n") tee.writeln("It is inspired by the Unix tee command,") tee.write("which can send output to both a file and stdout.\n") i = 1 s = "apple" tee.writeln("This line has interpolated values like {} and '{}'.".format(i, s)) tee.close() if __name__ == '__main__': main() ''' The error_exit function is as follows - put it into a separate file called error_exit.py in the same folder as the tee.py program, on put it on your PYTHONPATH: # error_exit.py # Author: Vasudev Ram # Web site: https://vasudevram.github.io # Blog: https://jugad2.blogspot.com # Product store: https://gumroad.com/vasudevram # Purpose: This module, error_exit.py, defines a function with # the same name, error_exit(), which takes a string message # as an argument. It prints the message to sys.stderr, or # to another file object open for writing (if given as the # second argument), and then exits the program. # The function error_exit can be used when a fatal error condition occurs, # and you therefore want to print an error message and exit your program. import sys def error_exit(message, dest=sys.stderr): dest.write(message) sys.exit(1) def main(): error_exit("Testing error_exit.\n") if __name__ == "__main__": main() '''