2014年3月15日星期六

Python的流重定向要点

起因

今晚在写LYCBot的时候需要实现一个在独立环境中运行代码的模块YCPY,其中涉及到流的重定向问题,特此记录。

使用内存流

Python中没有C#MemoryStream,但是有个类似的StringIO,提供类似的功能。

StringIO是一个类文件对象

StringIO提供了和文件相同的接口。

sys.stdout和sys.stderr使用StringIO进行重定向

代码如下:

sout = StringIO.StringIO()
serr = StringIO.StringIO()
self.stdout = sout
self.stderr = serr

当需要从两者中读取时,使用下列方法即可:

out.getvalue()

sys.stdin使用StringIO进行重定向

与前两者不同,sys.stdin需要读取,因此需要些特殊处理:

sin = StringIO.StringIO()
sys.stdin = sin
sys.stdin.write(input_txt)
sys.stdin.seek(0)

需要对sys.stdin进行一个seek到流起始位置的操作。


@LYC
转载请注明出处

0 评论:

发表评论