Перенаправление вывода консоли в другое приложение - PullRequest
3 голосов
/ 18 августа 2010

Скажем, я запускаю свою программу:

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

Ответы [ 3 ]

2 голосов
/ 18 августа 2010

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

EDIT

Возможно, что Console.exe не справляется с тем, что данные вводятся в него, а не вводятся в интерактивном режиме. Вы можете проверить это из командной строки, например,

echo "Hello" | Console.exe

Если это не даст ожидаемого результата, перенаправление вывода вашей программы тоже не будет. Чтобы протестировать вашу программу, не беспокоясь о целевой программе, вы можете попробовать

proc.StartInfo.FileName = @"cmd";
proc.StartInfo.Arguments = @"/C ""more""";

Если при этом отображается текст, который вы ему пишете, значит, проблема на принимающей стороне.

1 голос
/ 18 августа 2010

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.

0 голосов
/ 18 августа 2010

Вам необходимо использовать Process.StandardOutput и Process.StandardInput. Прочтите эту статью из MSDN, которая может помочь вам в правильном направлении: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

Кстати, гораздо более простой способ сделать то, что вы делаете, можно найти здесь, в качестве принятого ответа на аналогичный вопрос SO: c # перенаправить (труба) вывод процесса в другой процесс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...