gpt4 book ai didi

c# - 命令提示符输出被读取为空字符串

转载 作者:太空狗 更新时间:2023-10-30 01:07:56 26 4
gpt4 key购买 nike

我正在尝试执行命令提示符命令并读取 C# 中的输出。这是我的代码:

ProcessStartInfo cmdInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
cmdInfo.CreateNoWindow = true;
cmdInfo.RedirectStandardOutput = true;
cmdInfo.UseShellExecute = false;

Process cmd = new Process();
cmd.StartInfo = cmdInfo;
cmd.Start();
string result = cmd.StandardOutput.ReadToEnd();
cmd.WaitForExit();
cmd.Close();
return result;

它在大部分时间都有效,但有时 result=""对于我正在使用的命令来说是不可能的(例如,route add 应该在成功或失败时给出输出)。有任何想法吗?我想知道我是否在进程和 ReadToEnd 调用之间创建了竞争条件?

最佳答案

不是所有的输出都写到StandardOutput;如果出现问题,许多应用程序将改为写入 StandardError。您必须从两者中读取才能获得所有输出。

只要应用程序从不阻塞输入,在两个输出流上调用 ReadToEnd() 以获得所有输出应该是安全的。然而,一个更安全的选择是将一个事件连接到 OutputDataReceivedErrorDataReceived 事件。您可以将 lambda 表达式附加到关闭局部变量的这些表达式,以使事情变得非常简单:

var output = new StringBuilder();
var error = new StringBuilder();

cmd.OutputDataReceived += (o, e) => output.Append(e.Data);
cmd.ErrorDataReceived += (o, e) => error.Append(e.Data);

cmd.Start();
cmd.BeginOutputReadLine();
cmd.BeginErrorReadLine();
cmd.WaitForExit();

关于c# - 命令提示符输出被读取为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060019/

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