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

时间:2010-08-18 17:16:37

标签: c# console

所以说我运行我的程序:

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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.

答案 2 :(得分:0)

您需要使用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