在Python中,是否有一种简单的方法来设置一个类似文件的对象来进行写入,该对象实际上由多个输出流支持?例如,我想要这样的东西:
file1 = open("file1.txt", "w")
file2 = open("file2.txt", "w")
ostream = OStreamWrapper(file1, file2, sys.stdout)
#Write to both files and stdout at once:
ostream.write("ECHO!")
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找的是OStreamWrapper. 我知道编写自己的代码非常容易,但如果有现有的,我宁愿使用它,而不必担心查找和覆盖边缘情况。
包装所有公共file函数的方法:
import sys
def _call_for_all_streams(func_name):
def wrapper(self, *args, **kwargs):
result = []
for stream in self._streams:
func = getattr(stream, func_name)
result.append(func(*args, **kwargs))
return result
return wrapper
class OStreamWrapper(object):
def __init__(self, *streams):
self._streams = streams
for method in filter(lambda x: not x.startswith('_'), dir(file)):
setattr(OStreamWrapper, method, _call_for_all_streams(method))
if __name__ == '__main__':
file1 = open("file1.txt", "w")
file2 = open("file2.txt", "w")
ostream = OStreamWrapper(file1, file2, sys.stdout)
ostream.write("ECHO!")
ostream.close()
Run Code Online (Sandbox Code Playgroud)
但有点脏。
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |