【问题标题】:Redirecting console output to another application将控制台输出重定向到另一个应用程序
【发布时间】:2010-08-18 17:16:37
【问题描述】:

假设我运行我的程序:

Process proc = new Process();
proc.StartInfo.FileName = Path.GetDirectoryName(Application.ExecutablePath)
                           + @"\Console.exe";
proc.Start();

然后希望将我的控制台流输出到这个应用程序,我该怎么做呢? 所以说我有:

Console.WriteLine("HEY!");

我希望它显示在我运行的控制台的程序中。我知道我必须使用

重定向输出
Console.SetOut(TextWriter);

但我不知道如何让它写入另一个程序。

如果我使用 RedirectStandardInput 从 Console.exe 运行我的主程序,我可以看到我该怎么做。但这并没有真正的帮助:P

【问题讨论】:

    标签: c# console


    【解决方案1】:

    RedirectStandardInput 使 Console.exe 从您可以在主程序中访问的流中获取输入。您可以直接写入该流,也可以使用 SetOut 将控制台输出重定向到那里...

    Process proc = new Process();
    proc.StartInfo.FileName = Path.GetDirectoryName(Application.ExecutablePath)
                           + @"\Console.exe";
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.RedirectStandardInput = true;
    proc.Start();
    
    proc.StandardInput.WriteLine("Hello");
    
    Console.SetOut(proc.StandardInput);
    Console.WriteLine("World");
    

    编辑

    Console.exe 可能无法很好地处理将数据通过管道输入而不是交互输入。您可以使用类似的命令从命令行进行检查

    echo "Hello" | Console.exe
    

    如果这没有达到您的预期,重定向程序的输出也不会。要在不担心目标程序的情况下测试您的程序,您可以尝试

    proc.StartInfo.FileName = @"cmd";
    proc.StartInfo.Arguments = @"/C ""more""";
    

    如果显示你写给它的文本,那么问题出在接收端。

    【讨论】:

    • 我几乎有这个确切的代码,但它似乎并不想实际输出到其他程序:\ proc.StandardInput.WriteLine("t1");例如似乎没有写,我试过冲洗它但没有任何反应:(
    • @Blam:编辑了一些其他的东西来尝试
    • 终于搞定了,只需要更改我的 Console.exe 程序,谢谢 :)
    【解决方案2】:

    RedirectStandardInput 不是问题。 Console 是问题所在。

     StreamWriter myConsole = null;
    if (redirect)
    {
     Process proc = new Process(); 
     proc.StartInfo.FileName = Path.GetDirectoryName(Application.ExecutablePath) 
                           + @"\Console.exe"; 
     proc.StartInfo.UseShellExecute = false;
     proc.StartInfo.RedirectStandardInput = true;
     proc.Start(); 
     myConsole = myProcess.StandardInput;
     }
     else
        myConsole = Console.Out;
    

    然后像 Console. 一样使用 myConsole

    【讨论】:

      【解决方案3】:

      您需要使用 Process.StandardOutput 和 Process.StandardInput。查看 MSDN 中的这篇文章,它可能会帮助您找到正确的方向:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

      顺便说一句,可以在这里找到一种更简单的方法来做你正在做的事情,作为类似 SO 问题的公认答案:c# redirect (pipe) process output to another process

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        • 2021-12-12
        相关资源
        最近更新 更多