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

问题描述:

所以说,我跑我的程序:控制台重定向输出到另一个应用程序

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

然后想输出我的控制台流至该应用程序,我怎么会去这样做呢? 所以说我有:

Console.WriteLine("HEY!"); 

我想,要在节目露面,我跑的控制台。我知道我必须重定向输出使用

Console.SetOut(TextWriter); 

但我不知道如何去写它到其他程序。

我可以看到我怎么能做到这一点,如果我正在运行从Console.exe使用RedirectStandardInput我的主程序..但这并不能真正帮助:P

RedirectStandardInput使Console.exe从您可以在主程序中访问的流中输入它的输入。您可以直接写信给该流,或使用放样重定向控制台输出有...

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

如果显示的是你写的文字时,那么问题是在接收端。

+0

我几乎这个确切的代码,但它似乎并不希望实际输出到其他程序:\ proc.StandardInput.WriteLine( “T1”); 例如似乎并没有写,我试图冲洗它,但没有任何反应:( – Blam 2010-08-18 18:01:39

+0

@Blam:编辑了一些其他的事情来尝试 – stevemegson 2010-08-18 18:26:43

+0

最终得到它的工作,只是不得不改变我的Console.exe程序,谢谢: ) – Blam 2010-08-18 18:46:04

您需要使用Process.StandardOutput和过程。 StandardInput。请参阅MSDN上的这篇文章,它可能会帮助您指出正确的方向:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

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

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.