起因
今晚在写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
到流起始位置的操作。
0 评论:
发表评论