如何获取命令提示输出

时间:2016-05-11 13:25:32

标签: c# wpf svn console

我正在编写一个c#应用程序,用于验证有关SVN提交中行号更改的详细信息。在命令提示符下提供以下参数后,它会显示修订号,作者姓名和上次更改日期等...

参数: svn info -r {revision no} {Source path}

例如 - svn info -r 113653“F:\ SVN”

我也必须在C#中实现相同的目标。在C#中给出上述参数时,它应该从命令提示符读取输出(修订号,作者姓名和上次更改日期)并将其存储在字符串中。我尝试过 StandardOutput.ReadToEnd(),但无法满足我的要求。任何详细的解释都会有所帮助。

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用C#从命令提示符运行命令,如this question中所述?

string strCmdText = @"/C svn info -r 113653 ""F:\SVN""";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);

答案 1 :(得分:0)

您可以使用以下方法运行命令并从控制台检索标准输出:

    public static string StdOut(string args)
    {
        string cmdOut = "";

        ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/C " + args)
        {
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true
        };

        cmdOut = ExecuteCommand(cmdOut, startInfo);
        return cmdOut;
    }

它将输出作为字符串返回。 您还需要此方法(如上所述):

    private static string ExecuteCommand(string cmdOut, ProcessStartInfo startInfo)
    {
        Process p = Process.Start(startInfo);
        p.OutputDataReceived += (x, y) => cmdOut += y.Data;
        p.BeginOutputReadLine();
        p.BeginErrorReadLine();
        p.WaitForExit();

        return cmdOut;
    }

p.OutputdataReceived是DataReceivedEventHandler,它将连接到cmdOut变量上的任何std输出。