]> mj.ucw.cz Git - eval.git/blobdiff - t/moe/log.py
Fixed small error (which should manifest anyway)
[eval.git] / t / moe / log.py
index 4b8e586040cfef37cdffd214c3044f868719fd67..592fb846b047bd7b1952c3e6866080aa1074b67d 100644 (file)
@@ -1,12 +1,47 @@
 #!/usr/bin/env python
 
 import sys
+import os
+import traceback
 
-def say(msg):
-    sys.stdout.write(msg + "\n")
+orig_stdout_fd = os.dup(1)
+orig_stderr_fd = os.dup(2)
+progress_file = os.fdopen(orig_stdout_fd, "w", 0)
 
-def verbose(msg):
-    sys.stdout.write(msg)
+class MoeLog:
 
-def progress(msg):
-    sys.stdout.write(msg)
+    def __init__(self):
+       self.verbosity = 0
+       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)
+
+    def verbose(self, msg):
+       if self.verbosity and self.log_file:
+           self.log_file.write(msg)
+
+    def progress(self, 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)