python重定向

1.重定向到文件

import sys
sys.stdout = open("log.txt", "write")

    “任何提供file-like write方法的对象都可以被赋给sys.stdout方法从而使得标准输出输送到该对象的write方法.”。

    这种说法网上到处都是,但很少找到这样自定义的file-like write实现。前一阵子尝试了半天,总是不尽人意。因为我在做python扩展,想把python输出重定向到debugView,虽然写了个file-like write类,可结果总是让人不爽,输出了多余的换行符。今天突然来了灵感,发现了原因。


2.重定向到自定义的file-like write对象。

例:

import sys
import Lazy

g_oldStdout = sys.stdout
g_oldStderr = sys.stderr

class Redirect(object):
	def __init__(self):
		self.cache = ""
		self.out = Lazy.debug
		
	def init(self) :
		sys.stdout = self
		sys.stderr = self
		
	def write(self, s):
		if s == "
" :
			self.out(self.cache)
			self.cache = ""
		else :
			self.cache += s
	
	def release(self):
		global g_oldStdout, g_oldStderr
		sys.stdout = g_oldStdout
		sys.stderr = g_oldStderr
		

g_redirect = Redirect()

Lazy.debug是我封装了WindowsAPI的OutputDebugMsg函数。早期,我将write方法的内部实现直接用OutputDebugMsg输出,所以结果很悲催!!!

由于print 1, 2, 3, 4, 5并不是直接将调用stdout.write("12345")输出,而是write("1"),write("2"),write("3")...write(" ")的方式。




原文地址:https://www.cnblogs.com/ygxsk/p/7694009.html