alberthrocks

Faulthandler Test Code

Dec 31st, 2011
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. Faulthandler Test Code
  6. Note: I think this only fails on Windows (faulthandler 2.0 built with MinGW from C::B suite), with Python 2.x
  7. """
  8.  
  9. import os
  10.  
  11. from time import strftime as date
  12. from random import choice
  13. import time
  14. import traceback
  15. import threading
  16. import sys
  17.  
  18. global ThreadComplete
  19. ThreadComplete = False
  20.  
  21. class FaultHandlerTestcaseThread(threading.Thread):
  22.     def __init__(self):
  23.         threading.Thread.__init__(self)
  24.         print "** [FaultHandlerTestcaseThread] Watchdog thread started!"
  25.     def run(self):
  26.         """Run Worker Thread."""
  27.         global ThreadComplete
  28.         try:
  29.             import faulthandler
  30.             print "** [FaultHandlerTestcaseThread] Using Faulthandler for a better stack trace."
  31.             #fh = open("croquette_stacktrace.txt", "w")
  32.             faulthandler.dump_traceback(sys.stderr, True)
  33.             #fh.close()
  34.         except:
  35.             print "** [FaultHandlerTestcaseThread] Can't load Faulthandler module, so falling back to traceback."
  36.             print "** [FaultHandlerTestcaseThread] It's very likely that the output will not be very useful."
  37.         print "** [FaultHandlerTestcaseThread] Regular traceback:"
  38.         print "Stack:\n",str(traceback.print_stack())
  39.         print "Exc:\n",str(traceback.print_exc())
  40.        
  41.         print "*************************************"
  42.         sys.stdout.write("** stdout test (from thread)\n")
  43.         sys.stderr.write("** stderr test (from thread)\n")
  44.        
  45.         # This is just to test thread checking, leave commented for general use
  46.         time.sleep(15)
  47.        
  48.         print "** [FaultHandlerTestcaseThread] Main loop exited."
  49.         ThreadComplete = True
  50. class LogWriter:
  51.     def __init__(self, filename):
  52.         self.logfile = file(filename, 'a')
  53.         self.logfile.write("** Log Session Start - "+date("%Y-%m-%d %H:%M:%S")+" **\n")
  54.         self.enabledate = False
  55.     def write(self, text):
  56.         if self.enabledate == True:
  57.             if text.strip() != "":
  58.                 self.logfile.write("["+date("%Y-%m-%d %H:%M:%S")+"] "+text.rstrip()+"\n")
  59.         else:
  60.             self.logfile.write(text)
  61.         self.logfile.flush()
  62.  
  63.     def close(self):
  64.         self.logfile.write("** Log Session End - "+date("%Y-%m-%d %H:%M:%S")+" **\n")
  65.         self.logfile.close()
  66.    
  67.     def fileno(self):
  68.         return self.logfile.fileno()
  69. def start():
  70.     """Displays the GUI and starts the GUI Loop"""
  71.     global ThreadComplete
  72.     # Set up the debug logging, if needed.
  73.     LOGGING = 1
  74.     if LOGGING == 1:
  75.         global logout
  76.         logout = LogWriter("applog.txt")
  77.         oldstdout = sys.stdout
  78.         sys.stdout = logout
  79.         oldstderr = sys.stderr
  80.         sys.stderr = logout
  81.     FaultHandlerTHandle = FaultHandlerTestcaseThread()
  82.     FaultHandlerTHandle.start()
  83.    
  84.     print "** Sleeping 10 seconds to let thread run."
  85.     time.sleep(10)
  86.     sys.stdout.write("** stdout test\n")
  87.     sys.stderr.write("** stderr test\n")
  88.    
  89.     if ThreadComplete == False:
  90.         print "** Waiting until thread finishes."
  91.         while ThreadComplete == False:
  92.             time.sleep(1)
  93.    
  94.     if LOGGING == 1:
  95.         logout.close()
  96.     return
  97.  
  98.  
  99. if __name__ == "__main__":
  100.     start()
Advertisement
Add Comment
Please, Sign In to add comment