Skip to content

Instantly share code, notes, and snippets.

View chengui's full-sized avatar

Gui Chen chengui

  • Intel
  • BeiJing, China
View GitHub Profile
@chengui
chengui / pidlockfile.py
Created July 29, 2013 08:31
the pid lockfile from lockfile package
""" Lockfile behaviour implemented via Unix PID files.
"""
from __future__ import absolute_import
import os
import sys
import errno
import time
@chengui
chengui / ansistrm.py
Created September 26, 2013 03:01 — forked from vsajip/ansistrm.py
#
# Copyright (C) 2010-2012 Vinay Sajip. All rights reserved. Licensed under the new BSD license.
#
import ctypes
import logging
import os
class ColorizingStreamHandler(logging.StreamHandler):
# color names to indices
color_map = {
# -*- coding: utf-8 -*-
"""
Python logging tuned to extreme.
"""
__author__ = "Mikko Ohtamaa <mikko@opensourcehacker.com>"
__license__ = "MIT"
@chengui
chengui / logstdstream.py
Created September 26, 2013 10:20
how to catch external output to logger
log_file = open('example.log', 'a')
logging.basicConfig(stream=log_file, level=logging.DEBUG)
logging.debug("Test")
sys.stdout = log_file
sys.stderr = log_file
stdout_fd = os.dup(1)
stderr_fd = os.dup(2)
os.dup2(log_file.fileno(), 1)
os.dup2(log_file.fileno(), 2)
@chengui
chengui / loggerstream.py
Created September 26, 2013 10:21
how to treat logger as an outut stream
import logging
class LoggerWriter:
def __init__(self, logger, level):
self.logger = logger
self.level = level
def write(self, message):
if message != '\n':
self.logger.log(self.level, message)
@chengui
chengui / teestream.py
Created September 26, 2013 10:24
tee like stream for output both file and stdout
class Tee(object):
def __init__(self, name, mode):
self.file = open(name, mode)
self.stdout = sys.stdout
sys.stdout = self
def __del__(self):
sys.stdout = self.stdout
self.file.close()
def write(self, data):
self.file.write(data)
@chengui
chengui / redirectstd.py
Created September 26, 2013 10:25
redirect std stream to file stream
import os
import sys
class RedirectStdStreams(object):
def __init__(self, stdout=None, stderr=None):
self._stdout = stdout or sys.stdout
self._stderr = stderr or sys.stderr
def __enter__(self):
self.old_stdout, self.old_stderr = sys.stdout, sys.stderr
@chengui
chengui / redirectdecorator.py
Created September 26, 2013 10:27
redirect std stream with decorator
import sys
def redirect_stderr_stdout(stderr=sys.stderr, stdout=sys.stdout):
def wrap(f):
def newf(*args, **kwargs):
old_stderr, old_stdout = sys.stderr, sys.stdout
sys.stderr = stderr
sys.stdout = stdout
try:
return f(*args, **kwargs)