2013-03-06 2 views
0

Я пишу класс оболочки для компилятора замыкания, и я получаю пустую строку process.StandardOutput.ReadToEnd() Я написал следующий код.пустой выход, возвращающийся процессом.StandardOutput.ReadToEnd()

public class ClosureCompiler 
    { 
     ProcessStartInfo psi = new ProcessStartInfo(); 
     string _commandpath; 
     public ClosureCompiler(string commandpath) 
     { 
      _commandpath = commandpath; 

      psi.FileName = "java.exe"; 

      psi.UseShellExecute = false; 
      psi.RedirectStandardOutput = true; 
     } 

     public string Compile(string sourcefile) 
     { 
      psi.Arguments = " -jar " + _commandpath + " --js " + sourcefile; // +" --js_output_file " + destinationfile + ""; 

      var process = Process.Start(psi); 

      process.WaitForExit(); 
      return process.StandardOutput.ReadToEnd(); 
     } 
    } 

, но когда я запускаю команду из командной строки, вывод которой отображается на стандартном выходе.

ответ

0

Измените порядок работы линий. WaitForExit(); и process.StandardOutput.ReadToEnd(); После завершения WaitForExit process.StandardOutput уже «мертв».

Ваш код (метод Compile) должен идти, как это:

var process = Process.Start(psi); 
string stdOutput = process.StandardOutput.ReadToEnd(); 
process.WaitForExit(); 
return stdOutput; 

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

Смежные вопросы