代码之家  ›  专栏  ›  技术社区  ›  kjv

定期检查C中的命令行输出#

  •  1
  • kjv  · 技术社区  · 14 年前

    在我的C程序中,我使用进程从命令行调用外部程序,并重定向标准输入。在我向外部程序发出命令后,每隔3秒我必须发出另一个命令来检查状态-程序将以InProgress或Finished响应。我想得到一些帮助,尽可能高效地完成这项工作。进程检查由windows服务执行的长时间运行的操作的状态(由于我不想详述的原因,我不能直接与服务交互),因此在每个命令之后进程退出,但是无论结果如何,exitcode总是相同的。

    2 回复  |  直到 14 年前
        2
  •  2
  •   dtb    14 年前

    你可以使用 Timer Process.StandardOutput 要读取进程的输出:

    Timer timer = new Timer(_ =>
    {
        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = "foobar.exe";
        p.Start();
    
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();
    
        switch (output)
        {
        case "InProgress":
            // ...
            break;
    
        case "Finished":
            // ...
            break;
        }
    });
    
    timer.Change(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(3));