Background
In last couple of posts we saw how python works and how can we add a shutdown hook in python. Whenever we execute any python script it's output gets logged to the console from which you execute your script. In this post we will see how can we log this output to a file while retaining what gets printed on your console.
Capturing python output in a file along with the stdout
create a file test.py and add following code to it
import atexit import sys import datetime import os class Logger(object): def __init__(self, filename="output.txt"): # Initialize the logfile self.terminal = sys.stdout self.log = open(filename, "a") # Write the command and arguments if any self.log.write("CMD: " + str(sys.argv) + "\n") def __del__(self): self.log.flush() del self.log def write(self, message): self.terminal.write(message) self.log.write(message) def isatty(self): return True def flush(self): self.log.flush() now = datetime.datetime.utcnow() if not os.path.exists(os.getcwd() + os.sep + "logs"): os.makedirs(os.getcwd() + os.sep + "logs") logFile = os.getcwd() + os.sep + "logs" + os.sep +'log.txt' sys.stdout = Logger(logFile) del now print("Starting Test Python Modules"); def testmethod(): print("From test method") atexit.register(testmethod) print("Terminating Test Python Module");
Explanation : What above cod does? We are defining a custom class called Logger and defining methods that a stdout object defines. In this new custom class and methods we retain output to console and also add a output to a file whose path can be provided in the objects constructor while instantiating. Finally we say sys.sysout points to this new Logger object. Lets try this out. Run this script
- python test.py
No comments:
Post a Comment