2010-11-22 51 views
5

J'ai la méthode:Pourquoi cette méthode redirige-t-elle ma sortie de .exe [ffmpeg]?

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

Mais il ne marche pas redirigent ma sortie retMessage. Quelqu'un a des idées? J'ai testé les arguments dans un fichier bat et la sortie est définitivement sortie.

Cheers, Pete

+2

Peut-être que le processus n'écrit pas à StandardOutput mais uniquement à StandardError? – dtb

Répondre

8

Je pense (d'accord avec le commentaire de DTB): AFAIK ffmpeg utilise stdout à pipe de données binaires (multimédia, des instantanés, etc.) et stderr est utilisé à des fins d'exploitation forestière. Dans votre exemple, vous utilisez stdout.

Donc, changer votre code à:

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

et il devrait résoudre votre problème.

+0

GRAND! Thats trié ça merci pour le poste vraiment aidé je n'aurais jamais pensé à vérifier, merci encore! – Exitos

+0

J'ai eu le même problème avec la sortie de ffmpeg. StandardOutput retourne vide, toute la sortie vient de standardError .. J'espère que cela sauverait le temps de quelqu'un d'autre. – dvdmn