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

将控制台输出重定向到另一个应用程序

  •  3
  • Blam  · 技术社区  · 14 年前

    假设我运行我的程序:

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

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

    Console.WriteLine("HEY!");
    

    我想让它出现在我运行的程序的控制台上。我知道我必须用

    Console.SetOut(TextWriter);
    

    但我不知道我该怎么把它写进另一个程序。

    我可以看到,如果我运行我的主程序从Console.exe 使用重定向标准输入。。但这并没有真正的帮助:P

    3 回复  |  直到 14 年前
        1
  •  2
  •   stevemegson    14 年前

    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""";
    

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

        2
  •  1
  •   James Curran    14 年前

    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;
    

    那就用吧 myConsole 就像你一样 Console.

        3
  •  0
  •   Community Ramakrishna.p    7 年前

    http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

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