C # - Процесс перенаправленного вывода - Консоль отличается от окна CMD - PullRequest
3 голосов
/ 25 октября 2010

У меня есть приложение с Process, которое использует программу cmd.Вывод процесса перенаправляется следующим образом:

pr.StartInfo.RedirectStandardOutput = true;
pr.StartInfo.UseShellExecute = false;
pr.StartInfo.CreateNoWindow = true;                                         
pr.EnableRaisingEvents = true
pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);      
pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived); 

Вывод затем записывается в консоль с помощью:

public void OnDataReceived(object sender, DataReceivedEventArgs e)
{
    if(e.Data != null)                                  
    {
        Console.WriteLine(e.Data);
    }
}

Моя проблема в том, что Visual Studio печатает вывод, он очень отличается отвывод командной строки.Например, я пытаюсь извлечь данные из вывода, чтобы увидеть, сколько работы было сделано.Вывод моего приложения:

0K .......... .......... .......... .......... .......... 1% (ноль)
50K .......... .......... .................... .......... 2% (ноль)
100K .......... .................... .......... .......... 3% (ноль)
150K .......... .......... .......... .......... .......... 5% (ноль)

исходный вывод программы командной строки (индикатор хода выполнения и процент накапливаются с течением времени):
100% [==================================]

Это может показаться не большой разницей, но я пытаюсь добиться этого.Почему вывод Visual Studio не совпадает с выводом CMD?

Ps.Аргументы одинаковы в обоих примерах.

Ответы [ 2 ]

1 голос
/ 25 октября 2010

Это потому, что wget обнаруживает, что вы не работаете с видимой консолью. Существуют аргументы, с помощью которых вы можете изменить это.

Причина этого, в частности, заключается в том, что wget создает [==== путем перезаписи текущей строки. Вывод, который вы увидите через перенаправление, вероятно будет выглядеть примерно так:

  5% [=
 10% [==
 15% [===
 20% [====

и т.д.. Все они на новой линии.

Вы можете использовать этот тип обратной связи, добавив --progress=bar к аргументам.

0 голосов
/ 25 октября 2010

Консоль и файл очень разные. Индикатор выполнения явно использует некоторые специальные функции консоли, которые отсутствуют при перенаправлении (которое фактически является файлом).

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