控制台重定向输出到另一个应用程序
所以说,我跑我的程序:控制台重定向输出到另一个应用程序
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""";
如果显示的是你写的文字时,那么问题是在接收端。
您需要使用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.
我几乎这个确切的代码,但它似乎并不希望实际输出到其他程序:\ proc.StandardInput.WriteLine( “T1”); 例如似乎并没有写,我试图冲洗它,但没有任何反应:( – Blam 2010-08-18 18:01:39
@Blam:编辑了一些其他的事情来尝试 – stevemegson 2010-08-18 18:26:43
最终得到它的工作,只是不得不改变我的Console.exe程序,谢谢: ) – Blam 2010-08-18 18:46:04