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

3

假设我运行了我的程序:

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个回答

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

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

我有几乎完全相同的代码,但它似乎不想实际输出到其他程序 :
例如,proc.StandardInput.WriteLine("t1"); 似乎没有写入,我尝试过刷新,但什么也没发生 :(
- Blam
@Blam:编辑了一些其他尝试的东西。 - stevemegson
最终搞定了,只需要更改我的Console.exe程序,谢谢 :) - Blam

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;

然后只需像使用 Console. 一样使用 myConsole


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接