停止 RODBC 将信息记录到 stderr

Stop RODBC logging info to stderr

我有一个 C# 项目,我在其中使用进程 class 到 运行 R 脚本:

public void RunRScriptFile(string file) {
    StringBuilder eventLog = new StringBuilder();
    StringBuilder errorLog = new StringBuilder();
    var scriptRunProcess = new Process {
        StartInfo = new ProcessStartInfo {
            FileName = "Rscript",
            Arguments = file,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = false
        }
    };
    scriptRunProcess.Start();
    while (!scriptRunProcess.StandardOutput.EndOfStream) {
        eventLog.AppendLine(scriptRunProcess.StandardOutput.ReadLine());
    }
    while (!scriptRunProcess.StandardError.EndOfStream) {
        errorLog.AppendLine(scriptRunProcess.StandardError.ReadLine());
    }
    Log.AddEvent(new List<String>() { "Info" }, eventLog.ToString());
    if (errorLog.Length > 0) Log.AddEvent(new List<string>() { "Info", "Warning", "Critical" }, errorLog.ToString());
}

我 运行 的 R 脚本使用 RODBC 连接到数据库以获取数据。但是,每当我 运行 通过我的 RODBC 连接进行查询时,它会将 ODBC 驱动程序日志记录信息(跟踪设置为 0)打印到进程 StandardError。我怎样才能让它把它记录到信息中或者根本不记录它?我希望能够使用标准错误来实际检测错误,但我无法做到这一点,因为始终存在错误流。

RODBC 没有进行日志记录;这是由于 ODBC 连接器(在本例中为 Snowflake ODBC 连接器)试图打开一个已由另一个脚本的 ODBC 连接器打开的日志文件,而不是在不过滤的情况下记录到 stderr。

您可以通过同时使用 ODBC 连接器的 运行 两个脚本看到这一点。将 TRACE=1 设置为第二个环境变量也会给出 simba logs, which include a "cannot open file message" - using procmon 将显示有问题的文件是默认日志文件。