2011-07-17 34 views
5

Bir durumu koruyan bir (C#) konsol uygulamasına sahibim. Durum, uygulamayı konsol üzerinden çeşitli girişlerle besleyerek değiştirilebilir. Uygulamayı bir miktar giriş ile besleyebilmem gerekiyor, daha sonra çıktıyı durulayıp tekrarlayın.Tekrarlı Girdi Girişi 'Standart Girdi' Standart Giriş

Yeni bir işlem oluşturuyorum ve girişi/çıkışı yeniden yönlendirmenin normal çalışmasını yapıyorum. Sorun, girdiyi gönderdikten ve standart çıktıda ReadLine()'u aradıktan sonra, girdi girdisine artık yazamadığım standart girişte Close()'u aramadan önce bir değer döndürmemesidir.

Hala çıkış alırken giriş akışını nasıl açabilirim?

var process = new Process 
          { 
           StartInfo = 
            { 
             FileName = 
              @"blabal.exe", 
             RedirectStandardInput = true, 
             RedirectStandardError = true, 
             RedirectStandardOutput = true, 
             UseShellExecute = false, 
             CreateNoWindow = true, 
             ErrorDialog = false 
            } 
          }; 


     process.EnableRaisingEvents = false; 

     process.Start(); 

     var standardInput = process.StandardInput; 
     standardInput.AutoFlush = true; 
     var standardOutput = process.StandardOutput; 
     var standardError = process.StandardError; 

     standardInput.Write("ready"); 
     standardInput.Close(); // <-- output doesn't arrive before after this line 
     var outputData = standardOutput.ReadLine(); 

     process.Close(); 
     process.Dispose(); 

IO'yu yönlendirdiğim konsol uygulaması çok basittir. Console.Read() kullanarak konsoldan okur ve Console.Write() kullanarak yazar. Bu verilerin okunabilir olduğundan emin olduğumdan, standart çıktı/girdi (.NET'te yazılmayan) kullanarak okuyan başka bir uygulama var.

cevap

4

Bu, sizin için WriteLine("ready") kullanmak yerine metne bir dize ekleyeceğiniz Write("ready") kullanıyorsunuzdur. bu kadar basit :).

+0

Noway! Tanrım, haklısın. \ R \ n ile hazırlanmamış bir şey yazmam gerekirse ne yapmalıyım? Tek bir '\ n' ile linux stilini tercih etmek gibi. –

+2

@Qua: Use 'Environment.NewLine' yerine,' Unix olmayan platformlar için "\ r \ n" içeren bir dize veya Unix platformları için "\ n" içeren bir dize [msdn] (http: // msdn.microsoft.com/en-us/library/system.environment.newline.aspx). –

+0

WriteLine otomatik olarak Enviroment.Newline'ı kullanır mı? –