gpt4 book ai didi

c# - 以编程方式执行 "java -version"将输出放入 StandardError 而不是 StandardOutput

转载 作者:行者123 更新时间:2023-12-01 15:25:16 24 4
gpt4 key购买 nike

当我尝试以编程方式检测我的 PC 上的 java 版本时,我遇到了非常奇怪的行为。我正在使用以下 C# 代码:

ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c java -version");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
output = proc.StandardOutput.ReadToEnd();
if (output == "")
output = proc.StandardError.ReadToEnd();
return output;

这会显示正确的信息,但结果是在 proc.StandardError.ReadToEnd() 中找到的,而不是像任何其他命令(即“java -help”)中那样在 proc.StandardOutput.ReadToEnd() 中找到。

更奇怪的是,如果我运行“java -showversion”,它应该输出java版本,然后输出帮助信息,我会在StandardOutput中获得帮助信息,而版本信息在StandardError中。这对我来说没有意义。

我在 2 台 Windows 7 x64 机器和 1 台 XP x32 机器上对此进行了测试。到处都是同样的事情。真的很奇怪。

最佳答案

看起来像这样(即在标准输出上打印的版本)是一个老问题,sun(oracle)从未修复过以避免破坏遗留系统:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4380614 。在 Linux 上,java -version > foo 将创建一个空文件,而 java -version 2> foo 将创建一个包含版本的文件。

关于c# - 以编程方式执行 "java -version"将输出放入 StandardError 而不是 StandardOutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com