在 limodou 的blog中看到一篇关于 nose 的文章,看了一下,感觉nose用起来挺简单的。
在nose 中有这样一段代码引起了我的注意...
class _Capture(object): """Output capture handler """ def __init__(self): self.buffer = None self.orig_stdout = sys.stdout def begin(self): self.buffer = StringIO() sys.stdout = self.buffer msg("begin capture %s" % sys.stdout,5) def captured(self): if self.buffer is not None: msg("some output was captured",5) return self.buffer.getvalue() def __call__(self): self.begin() def end(self): sys.stdout = self.orig_stdout
这里把 sys.stdout 重定向到 self.buffer 中,这样有什么好处呢?最简单的就是可以在没有窗口
的情况下捕捉到 print 的信息:)
Python的文档中有这样一段:
stdout andstderr
needn't be built-in file objects: any object is acceptable as
long as it has a write() method that takes a string argument. (Changing these
objects doesn't affect the standard I/O streams of processes executed by
os.popen(), os.system() or the exec*() family of functions in the os module.)
看来,这个地方可以自己写一个接受信息的类了:)