【问题标题】:Getting stdout from console app asyncronously without waiting for console to exit从控制台应用程序异步获取标准输出而不等待控制台退出
【发布时间】:2011-03-29 01:21:02
【问题描述】:

我在从我的应用程序生成的小型长时间运行的控制台应用程序中获取一些控制台标准输出时遇到问题。

我的应用程序启动控制台应用程序,并且控制台应用程序将在我的应用程序生命周期内(或直到显式终止)一直监听端口。

当控制台应用程序启动时,它会输出它正在侦听的端口号,我需要异步获取该端口号并在应用程序的其他地方使用它。问题是,我获取输出数据的事件处理程序永远不会被调用。我敢肯定一定有什么小事我忘了做。

  ProcessStartInfo si = new ProcessStartInfo();
  si.FileName = theFileName;
  si.Arguments = theargs;
  si.UseShellExecute = false;
  si.RedirectStandardOutput = true;
  si.CreateNoWindow = true;
  _process = Process.Start(si);
  _process.OutputDataReceived += (sender, args) =>
    {
      //Parse the args.Data string for the port number.
    };
  _process.BeginOutputReadLine(); // My handler never gets called.
  // I don't want to call _process.WaitForExit() here as this is a long running process.

【问题讨论】:

    标签: c# processstartinfo redirectstandardoutput


    【解决方案1】:

    好的,在我的特殊情况下,问题是由控制台应用程序未刷新标准输出引起的。

    控制台应用程序是用 python 编写的(然后通过 py2exe 在 windows 中运行),它需要...

    sys.stdout.flush()
    

    在我们可以在应用退出之前获得任何输出之前被调用。

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 2019-07-20
      • 2011-06-30
      • 1970-01-01
      • 2013-03-03
      • 2022-08-19
      • 2016-12-08
      • 2014-02-17
      • 2017-02-23
      相关资源
      最近更新 更多