c# - 重定向标准输出

标签 c# process output io-redirection

我有一个 C# 应用程序 A,它调用另一个 C# 应用程序 B,后者又调用应用程序 C 的多个实例。

我想将应用程序 C 的输出重定向到应用程序 A 的输出。

我已经将应用程序 B 的输出重定向到应用程序 A 的输出。

现在,在应用程序 B 的代码中,我正在重定向每个进程的输出,并将重定向的输出打印到控制台。不幸的是,由于某种原因,没有打印任何内容。

(我目前正在测试它,而不使用应用程序 A - 我只运行应用程序 B)。

这是代码:

private void runSingleFile (string execFile, string commandArgs)
{
      Process processToRun = new Process();
      processToRun .StartInfo.FileName = execFile;
      processToRun .StartInfo.Arguments = commandArgs;
      processToRun .StartInfo.UseShellExecute = false;
      processToRun .StartInfo.RedirectStandardOutput = true;
      processToRun .OutputDataReceived += outputRedirection;
      processToRun.Start();
      Console.WriteLine("");
      Thread.Sleep(100);  
      processToRun.BeginOutputReadLine();
}

private void outputRedirection(object sendingProcess, DataReceivedEventArgs outLine)
{
      try
      {
           if (outLine.Data != null)
              Console.WriteLine(outLine.Data);
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex.Message);
          return;
      }
}

有什么想法吗?

最佳答案

.net Process 对象并不能让人们轻松地在正确处理 IO 方面“做正确的事情”。

这些页面列出了一些需要处理的问题:

从您的代码示例中,以下是您需要查看的一些项目:

  1. 您需要捕获 stderr 和 stdin(后者如果不使用应立即关闭)。
  2. 您还需要注意,在子进程退出后,您仍然可以在 outputRedirection 回调上接收事件。

关于c# - 重定向标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887266/

相关文章:

c# - 使用 DirectoryServices 进行跨域身份验证

C# - 字符串比较是错误的,尽管我检查过

c++ - 以相反顺序打印字符串输入

c++ - 如何在不四舍五入的情况下在C++中显示固定数量的数字

javascript - angular 2输出后如何监听事件?

c# - 为什么 CompareTo 不使用 ASCII 代码排序对我的字符串进行排序?

c# - "Build failed"on Database First Scaffold-DbContext

c - NativeAPI挂起进程

java - 为什么在 Linux 中调用 "Runtime.getRuntime().exec(cmd);"没有输出?

c - fork 进程与套接字通信