首页 > 解决方案 > Gurobi 和 gurobipy - 使用 Python 日志记录时输出控制台加倍

问题描述

例如,当将 Gurobi Python 包(gurobipy v. 8.1.0)与标准 Python 日志记录包一起使用时,我在控制台上获得了 Gurobi 的双倍输出

Total elapsed time = 498.27s
[2019-03-04 17:51:58,804][INFO] Total elapsed time = 498.27s

有人知道如何删除 gurobipy 的日志记录吗?谢谢

标签: pythonlogginggurobi

解决方案


我也有这个问题。找不到“官方”解决方案,所以我推出了自己的 hack:

import sys

def solve():
    class DevNull:
        def write(self, *args, **kwargs):
            pass

        def flush(self, *args, **kwargs):
            pass

    sys.stdout = DevNull() 

    try:
        return _actually_solve()
    except Exception:
        # restore stdout so that handlers can print normally
        # https://docs.python.org/3/library/sys.html#sys.__stdout__ 
        sys.stdout = sys.__stdout__
        raise
    finally:
        sys.stdout = sys.__stdout__

该函数将实际的求解逻辑包装在其中_actually_solve,并将标准输出替换为一个类似文件的对象,该对象忽略我们在其中编写的所有内容。


推荐阅读