gpt4 book ai didi

c# - 为什么我在从进程重定向时缺少输出?

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:36 26 4
gpt4 key购买 nike

我正在使用 Process 类调用控制台应用程序。我正在将输出重定向到一个日志文件,但是当我不重定向输出时控制台窗口中的消息比我重定向时日志文件中的消息多。有什么想法吗?

ProcessStartInfo psi = new ProcessStartInfo();
string filename = @"ProgrammingMaster_LocalPowertrain.exe";
psi.FileName = filename;
string arguments = String.Format("{0} {1} false", InstanceId.ToString(), ManifestFolderPath);
psi.Arguments = arguments;
LogMessage(msgType.Warning, filename + " - " + arguments);
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
FBlockProcess = new Process();
FBlockProcess.StartInfo = psi;
FBlockProcess.OutputDataReceived += new DataReceivedEventHandler(FBlockProcess_OutputDataReceived);
FBlockProcess.ErrorDataReceived += new DataReceivedEventHandler(FBlockProcess_ErrorDataReceived);
FBlockProcess.Start();
FBlockProcess.BeginOutputReadLine();
FBlockProcess.BeginErrorReadLine();

在我的 OutputDataReceived 处理程序中,我只是将字符串添加到 ConcurrentQueue

编辑:我应该补充一点,我想实时或接近实时地捕获输出。该过程可能需要 30 多分钟才能运行,我不想等那么久才能看到发生了什么。

更新:在输出前四行之后,永远不会调用 OutputDataReceived eventHandler,即使我知道当我不重定向时还有 10 或 15 行输出到控制台。关于可能导致这种情况的任何想法?

最佳答案

试试这个例子:

public static void Main()
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/c dir *.cs";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();

string output = p.StandardOutput.ReadToEnd();

Console.WriteLine("Output:");
Console.WriteLine(output);
}

更新

我想你可以在这里尝试一些有用的东西:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.errordatareceived.aspx

更新

我发现此链接和“解决方案 1”听起来是正确的方法:

http://www.codeproject.com/Answers/152467/Problem-executing-a-command-line-command-from-Csha.aspx?cmt=49313#answer1

关于c# - 为什么我在从进程重定向时缺少输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152030/

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