#!/usr/bin/env python
import sys
+import os
+import traceback
+
+orig_stdout_fd = os.dup(1)
+orig_stderr_fd = os.dup(2)
+progress_file = os.fdopen(orig_stdout_fd, "w", 0)
class MoeLog:
def __init__(self):
self.verbosity = 0
- self.progress_file = sys.stdout
+ self.progress_file = progress_file
self.log_file = None
+ def open(self, name):
+ self.log_file = open(name, "w")
+ os.dup2(self.log_file.fileno(), 1)
+ os.dup2(self.log_file.fileno(), 2)
+
def say(self, msg):
if self.log_file:
self.log_file.write(msg)
self.log_file.write(msg)
def progress(self, msg):
- if self.progress:
- self.progress.write(msg)
+ if self.progress_file:
+ self.progress_file.write(msg)
+
+ def shout(self, msg):
+ self.say(msg)
+ self.progress(msg)
+
+ def flush(self):
+ self.log_file.flush()
default = MoeLog()
+
+def fatal_exception():
+ os.dup2(orig_stderr_fd, 2)
+ traceback.print_exc()
+ sys.exit(1)