zoukankan      html  css  js  c++  java
  • Process.start: how to get the output?

    1: Synchronous example

    static void runCommand() {
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.Arguments = "/c DIR"; // Note the /c command (*)
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();
        //* Read the output (or the error)
        string output = process.StandardOutput.ReadToEnd();
        Console.WriteLine(output);
        string err = process.StandardError.ReadToEnd();
        Console.WriteLine(err);
        process.WaitForExit();
    }

    Note that it's better to process both output and errors: they must be handled separately.

    (*) For some commands (here StartInfo.Arguments) you must add the /c directive, otherwise the process freezes in the WaitForExit().

    2: Asynchronous example

    static void runCommand() {
        //* Create your Process
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.Arguments = "/c DIR";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        //* Set your output and error (asynchronous) handlers
        process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
        process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
        //* Start process and handlers
        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();
        process.WaitForExit();
    }
    static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) {
        //* Do your stuff with the output (write to console/log/StringBuilder)
        Console.WriteLine(outLine.Data);
    }

    If you don't need to do complicate operations with the output, you can bypass the OutputHandler method, just adding the handlers directly inline:

    //* Set your output and error (asynchronous) handlers
    process.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
    process.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data);
  • 相关阅读:
    bash 设置
    fabric-ca-client
    fabric工具
    nodejs
    Hyperledger 项目
    JAVA集合小结
    java内部类的作用分析
    如何使用javadoc
    30天轻松学习javaweb_Eclipse在修改了web.xml后将自动更新到tomcat服务器中
    30天轻松学习javaweb_修改tomcat的servlet模板
  • 原文地址:https://www.cnblogs.com/zeroone/p/4709335.html
Copyright © 2011-2022 走看看