Как читать стандартный вывод моего собственного приложения

avatar
Bitterblue
7 января 2013 в 09:01
2298
1
2

У меня есть приложение, которое должно читать собственный вывод, записанный через

Console.WriteLine("blah blah");

Я пытаюсь

Process p = Process.GetCurrentProcess();
StreamReader input = p.StandardOutput;
input.ReadLine();

Но это не работает из-за «InvalidOperationException» во второй строке. Там написано что-то вроде «StandardOutput не был перенаправлен, или процесс еще не запущен» (переведено)

Как я могу прочитать свой вывод? Есть ли другой способ сделать это? И чтобы завершить, как написать свой собственный ввод?

Приложение с выводом уже запущено.

Я хочу прочитать его вывод в том же приложении . 2-го приложения нет. Только один.

Источник
user586399
7 января 2013 в 09:03
0

Что именно ты хочешь делать?

boindiil
7 января 2013 в 09:04
1

Почему бы просто не написать метод, который записывает данные в консоль и, кроме того, делать то, что вам нужно?

Moriya
7 января 2013 в 09:04
3

Мне действительно любопытно ... ПОЧЕМУ ты хочешь это сделать?

Default
7 января 2013 в 09:10
0

эта ошибка объясняется здесь. В нем точно указано, что вы должны гарантировать, чтобы использовать StandardOutput. (ищите Исключения )

Ответы (1)

avatar
Moriya
7 января 2013 в 09:10
6

Я просто догадываюсь, каковы ваши намерения, но если вы хотите прочитать вывод из запущенного приложения, вы можете перенаправить вывод.

 // Start the child process.
 Process p = new Process();
 // Redirect the output stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardOutput = true;
 p.StartInfo.FileName = "Write500Lines.exe";
 p.Start();
 // Do not wait for the child process to exit before
 // reading to the end of its redirected stream.
 // p.WaitForExit();
 // Read the output stream first and then wait.
 string output = p.StandardOutput.ReadToEnd();
 p.WaitForExit();

пример из http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

Изменить:

Если вы хотите перенаправить вывод текущего консольного приложения, как указано в вашем редактировании, вы можете использовать.

private static void Main(string[] args)
{
    StringWriter writer = new StringWriter();
    Console.SetOut(writer);
    Console.WriteLine("hello world");

    StringReader reader = new StringReader(writer.ToString());
    string str = reader.ReadToEnd();
}
Bitterblue
7 января 2013 в 10:50
0

Можете ли вы сделать последний из них буферизованным и асинхронным, чтобы вы могли читать его в любое время в реальном времени из другого потока?

Moriya
7 января 2013 в 11:11
1

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