所以说我运行我的程序:
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
答案 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