60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
# This is a helper for the win32trace module
|
|
|
|
# If imported from a normal Python program, it sets up sys.stdout and sys.stderr
|
|
# so output goes to the collector.
|
|
|
|
# If run from the command line, it creates a collector loop.
|
|
|
|
# Eg:
|
|
# C:>start win32traceutil.py (or python.exe win32traceutil.py)
|
|
# will start a process with a (pretty much) blank screen.
|
|
#
|
|
# then, switch to a DOS prompt, and type:
|
|
# C:>python.exe
|
|
# Python 1.4 etc...
|
|
# >>> import win32traceutil
|
|
# Redirecting output to win32trace remote collector
|
|
# >>> print "Hello"
|
|
# >>>
|
|
# And the output will appear in the first collector process.
|
|
|
|
# Note - the client or the collector can be started first.
|
|
# There is a 0x20000 byte buffer. If this gets full, it is reset, and new
|
|
# output appended from the start.
|
|
|
|
import win32trace
|
|
|
|
|
|
def RunAsCollector():
|
|
import sys
|
|
|
|
try:
|
|
import win32api
|
|
|
|
win32api.SetConsoleTitle("Python Trace Collector")
|
|
except:
|
|
pass # Oh well!
|
|
win32trace.InitRead()
|
|
print("Collecting Python Trace Output...")
|
|
try:
|
|
while 1:
|
|
# a short timeout means ctrl+c works next time we wake...
|
|
sys.stdout.write(win32trace.blockingread(500))
|
|
except KeyboardInterrupt:
|
|
print("Ctrl+C")
|
|
|
|
|
|
def SetupForPrint():
|
|
win32trace.InitWrite()
|
|
try: # Under certain servers, sys.stdout may be invalid.
|
|
print("Redirecting output to win32trace remote collector")
|
|
except:
|
|
pass
|
|
win32trace.setprint() # this works in an rexec environment.
|
|
|
|
|
|
if __name__ == "__main__":
|
|
RunAsCollector()
|
|
else:
|
|
SetupForPrint()
|