为什么我的机器将stderr写入stdout?

时间:2013-10-10 15:45:18

标签: c# stdout stderr system.diagnostics

在针对C#中的System.Diagnostics.Process工具编写代码时,我只捕获了StandardOutput并对其进行了解析。但是,在构建服务器上进行单元测试失败。在一位同事试穿他的机器后,它也失败了。

然后我找到了Jon Skeet's answer关于为什么StandardOutput为空的问题,他提到从System.Diagnostics.Process中捕获StandardOutput和StandardError。果然,我们在同事的机器上试过了它,但它确实有效。

我的问题是,为什么我的机器上的StandardOutput(stdout)写入了我的同事的机器和我们的构建服务器上的StandardError(sterr)?是否存在强制此行为的环境设置?

1 个答案:

答案 0 :(得分:1)

事实证明我正在调用的命令sqlcmd.exe在我的同事的机器和构建机器上使用SQL Server 2008(c:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn)版本,但是我的机器上的SQL Server 2012(c:\ Program Files \ Microsoft SQL Server \ 110 \ Tools \ Binn)版本。将路径变量更改为指向我机器上的SQL Server 2008版本。

当运行的.sql脚本花费的时间超过sqlcmd.exe -t,查询超时时,可能会将“Timeout expired”消息写入stdout而不是SQL Server 2012的sqlcmd.exe中的stderr。参数设置为。