控制台输出到不使用SetOut的文件

时间:2015-03-11 08:53:27

标签: c# dll console

我从C#打电话给Gurobi(好几次)。因此,控制台输出是我和Gurobi日志记录的混合物。如果我覆盖Console.Out,只有我的输出被重定向,但Gurobi(显然包裹一个非托管的dll)仍然写入屏幕。

有没有办法从控制台获取每一行(作为字符串或文件)?

1 个答案:

答案 0 :(得分:1)

您可以使用回调对象捕获Gurobi的控制台输出。回调对象有一个Callback()方法,出于多种原因调用该方法,其中一个方法是告诉您它将要写入控制台的文本。你可以用这个文字做任何你想做的事。在下面的示例中,我将文本写为调试输出:

class MyGRBCallback : GRBCallback
{
    protected override void Callback()
    {
        if (this.where == GRB.Callback.MESSAGE)
        {
            String text = this.GetStringInfo(GRB.Callback.MSG_STRING);
            Debug.WriteLine(text);
        }
    }
}

您可以使用GRBModel的SetCallback方法告诉Gurobi您的回调对象。

var env = new GRBEnv();
var m = new GRBModel(env);
var callback = new MyGRBCallback();
m.SetCallback(callback);

Gurobi将调用您的回调并在此时写入控制台。你可以告诉Gurobi不要写入控制台:

env.Set(GRB.IntParam.LogToConsole, 0);