Почему этот метод не перенаправляет мой вывод из .exe [ffmpeg]? - PullRequest
5 голосов
/ 22 ноября 2010

У меня есть метод:

public static string StartProcess(string exePathArg, string argumentsArg, int timeToWaitForProcessToExit)
    {
        string retMessage = "";

        using (Process p = new Process())
        {
            p.StartInfo.FileName = exePathArg;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.Arguments = argumentsArg;
            p.StartInfo.UseShellExecute = false;



            try
            {
                p.Start();
                StreamReader myOutput = p.StandardOutput;

                retMessage = "STANDARD OUTPUT: " +  myOutput.ReadToEnd();

                p.WaitForExit(timeToWaitForProcessToExit);
            }
            catch (Exception ex)
            { 
                retMessage = "EXCEPTION THROWN: " + ex.ToString();

            }
            finally
            {
                try
                {
                    p.Kill();
                }
                catch { }
            }
        }

        return retMessage;
    }

Но он не перенаправляет мой вывод в retMessage.У кого-нибудь есть идеи?Я проверил аргументы в файле bat, и вывод определенно выводится.

Приветствия, Пит

1 Ответ

8 голосов
/ 22 ноября 2010

Мое предположение (согласен с комментарием dtb): AFAIK ffmpeg использует stdout для передачи двоичных данных (мультимедиа, снимки и т. Д.), А stderr используется для регистрации. В вашем примере вы используете стандартный вывод.

Итак, измените свой код на:

    p.StartInfo.RedirectStandardError = true;
    ...
    string log = p.StandardError.ReadToEnd();

и это должно решить вашу проблему.

...