我正在研究一个Python类,该类使用我们自己开发的其他一些类/模块。
我们在每个模块中使用一些印刷品来向用户提示一些信息(日志记录也用于获取更详细的信息)。 问题是,当“主”类使用(子)模块时,打印内容可能会过多,并隐藏基本的主信息。在我当前的应用程序中,“主”是一种遗传算法,使用了一个多处理子类(用于运行案例),该子类还使用其他一些子类(用于运行非python代码,定义初始化数据等)。每个班级都会打印与该班级相关的信息,而我只想显示硕士的信息。
我尝试将sys.stdout和sys.stderr重定向到日志记录。见下文,我尝试一个简化的例子。
被调用的模块
from multiprocessing import Process
def send2disp(text) :
print(text)
return
def send2disp_mp(text) :
workers = [Process(target=send2disp,args=(text+str(pi),)) for pi in range(2)]
for ti in workers :
ti.start()
for ti in workers :
ti.join()
if __name__ == '__main__':
pass
主脚本
from test_print import send2disp,send2disp_mp #'test_print' is the module filename
import logging
import sys
if __name__ == '__main__':
send2disp('NoRedirection->OnStdout')
logging.basicConfig(filename='test.log',level=logging.DEBUG,filemode='w')
logging.info('OnLog')
fl = logging.getLoggerClass().root.handlers[0].stream
sys.stdout = fl
sys.stderr = fl
print('InScript->IsOnLog')
send2disp('SubModule->IsOnLog')
send2disp_mp('ShouldBeOnlog')
使用主脚本,我定义一个日志文件并将stdout / stderr重定向到该文件。然后,我调用子模块的两个函数:
如何处理重定向标准输出和多处理? 预先感谢。