【发布时间】:2015-04-24 21:17:57
【问题描述】:
我正在使用 Process 类从 .NET 程序运行 cmd.exe,并传入各种命令来执行程序,即 ipconfig、netstat 等。问题是有时这些程序会输出错误文本,该文本会发送到 StandardError,但是无法知道在标准输出期间实际打印错误的确切位置。我得到的只是单独的错误消息。是否可以将 StandardOutput 和 StandardError 组合成一个同步流,以便我按顺序获取所有数据?如果不是,那么我该如何组织来自两个不同流的输出,使其按正确的顺序排列?
【问题讨论】:
-
要合并您需要的流:按消息拆分数据,获取传入号码。然后您就可以将消息合并到一个集合中
-
我不确定我是否理解?它是一个流,因此没有任何“消息”或“数字”与任何数据相关联。
-
流是缓冲的,因此您需要解析传入的数据部分。如果您无法解析输出,则无法正确合并。
-
这很容易,你可以让cmd.exe将两者合并。将神秘的
" 2>&1"附加到其命令行参数中。现在所有输出都进入标准输出,您再也分不清正常输出和错误输出之间的区别了。 -
@HansPassant 你建议的是我正在寻找的东西,但是,它没有用?我在代码中使用了 'p.StartInfo.Arguments = "2>&1"' 并停止从 StandardError 流中读取。运行代码后,我根本没有得到任何错误输出。