Ñò ô†³Kc @ s¼ d Z d d k Z d d k Z d d k l Z d e i f d „ ƒ YZ d a d a d „ Z d „ Z d „ Z e a a d e i f d „ ƒ YZ d a d a d „ Z d „ Z d „ Z d S( sà threadedprint.py ================ :author: Ian Bicking :date: 12 Jul 2004 Multi-threaded printing; allows the output produced via print to be separated according to the thread. To use this, you must install the catcher, like:: threadedprint.install() The installation optionally takes one of three parameters: default The default destination for print statements (e.g., ``sys.stdout``). factory A function that will produce the stream for a thread, given the thread's name. paramwriter Instead of writing to a file-like stream, this function will be called like ``paramwriter(thread_name, text)`` for every write. The thread name is the value returned by ``threading.currentThread().getName()``, a string (typically something like Thread-N). You can also submit file-like objects for specific threads, which will override any of these parameters. To do this, call ``register(stream, [threadName])``. ``threadName`` is optional, and if not provided the stream will be registered for the current thread. If no specific stream is registered for a thread, and no default has been provided, then an error will occur when anything is written to ``sys.stdout`` (or printed). Note: the stream's ``write`` method will be called in the thread the text came from, so you should consider thread safety, especially if multiple threads share the same writer. Note: if you want access to the original standard out, use ``sys.__stdout__``. You may also uninstall this, via:: threadedprint.uninstall() TODO ---- * Something with ``sys.stderr``. * Some default handlers. Maybe something that hooks into `logging`. * Possibly cache the results of ``factory`` calls. This would be a semantic change. iÿÿÿÿN( t filemixint PrintCatcherc B s† e Z d d d e d „ Z e i d „ Z d „ Z d „ Z d „ Z d „ Z d „ Z d „ Z d e i d „ Z d e i d „ Z RS( c C s | o t i } n | o | i | _ n; | o | i | _ n$ | o | i | _ n | i | _ | | _ | | _ | | _ h | _ d S( N( t syst stdoutt _writedefaultt _defaultfunct _writefactoryt _writeparamt _writeerrort _defaultt _factoryt _paramwritert _catchers( t selft defaultt factoryt paramwritert leave_stdout( ( s<