从c#

时间:2015-05-27 19:23:53

标签: c# git powershell msysgit

我只是玩了一些c#和Msysgit的git.exe,并且遇到了丢失的颜色问题。我有一个非常简单的控制台程序:

class Program
{
    static void Main(string[] args)
    {
        System.Diagnostics.ProcessStartInfo Msysgit = new ProcessStartInfo();
        Msysgit.CreateNoWindow = true;
        Msysgit.UseShellExecute = false;
        Msysgit.RedirectStandardError = true;
        Msysgit.RedirectStandardOutput = true;
        Msysgit.FileName = @"C:\Program Files (x86)\Git\bin\git.exe";//Msysgit default location       
        Msysgit.Arguments = "log --graph --format=format:\"%C(bold blue) %x08%h\" "; //git command
        Msysgit.WorkingDirectory = @"C:\git\posh-git";//repo to test with

        using (Process gitProcess = new Process())
        {
            gitProcess.StartInfo = Msysgit;
            gitProcess.Start();
            string gitout = gitProcess.StandardOutput.ReadToEnd();

            Console.WriteLine(gitout);
        }

        Console.ReadLine();
    }
}

这产生以下结果:
*
*(Esc)[1; 34m2490619
| \
| *(Esc)[1; 34me81889e
| | \
| | *(Esc)[1; 34mab09e6b
| | /
| *(Esc)[1; 34m16bbe4c

现在我可以看到ANSI转义序列[1; 34m表示蓝色应用于SHA-1并且在git命令中请求;但是与git命令的--graph部分输出相关的颜色信息发生了什么,特别是管道和斜杠。当从Powershell对git.exe进行相同的调用时,图表显示为彩色以及蓝色SHA-1。

我的总体意图是从git.exe捕获输出,应用一些c#处理,然后将修改后的输出发送到Powershell。同样,即使颜色在屏幕上正确显示,保存Powershell中的输出也会丢失图形颜色信息。

0 个答案:

没有答案