2016-05-16 4 views
0

У меня проблема, мне нужно выполнить консольную программу, и я должен показать выходную информацию этой консоли в своей программе. У меня есть строковая переменная, называемая «результат», которая должна хранить эту информацию, но всегда является нулевой, и я не знаю, почему. Может кто-нибудь мне помочь? Я поставил код ниже:Чтение с внешней программы/консоли

Process p = new Process(); 
      p.StartInfo.FileName = "python"; 
      p.StartInfo.Arguments = @"C:\Users\xxx\xxx\xxx\xxx_\xxx yyy\zzz.py " + path; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.UseShellExecute = false; 
      p.Start(); 

      StreamReader sr = p.StandardOutput; 
      p.WaitForExit(); 
      string result = sr.ReadToEnd(); 
      sr.Close(); 

      textBox1.Text = result; 

На консоли, я получаю 8382 JGK, к примеру, но моя переменная результат всегда «».

+0

У вас может возникнуть проблема с синхронизацией. Можете ли вы добавить поток сна после запуска 1-го процесса? Поскольку вы используете разные процессы, вы не уверены, что 1-й будет выполнен, когда вы пытаетесь прочитать вывод из него. – Gnqz

+0

Да, могу, но сколько времени? Thread.sleep (5000), например? – Imrik

+0

ReadToEnd считывает все символы с текущей позиции до конца потока, поэтому есть шанс, что вы на последней позиции, прежде чем начать чтение. – Vegz

ответ

0

Вы могли бы попробовать что-то вроде этого

StreamReader sr = p.StandardOutput; 
p.WaitForExit(); 
char[] result = new char[p.Length]; //or sr.BaseStream.Length 
sr.Read(result,0,(int)p.Length); // again or sr.BaseStream.Length 

И посмотреть, если результат массив содержит ничего.

+0

это дает мне исключение, когда char [] result = new char [sr.BaseStream.Length]; "последовательность несовместима с поиском" – Imrik

+0

Да, мой плохой, извините, не смог проверить его раньше. Попробуйте 'char [] result = new char [128];' (Tbh, я не знаю, есть ли способ получить нужную вам длину), а затем 'sr. Прочитайте (результат, 0, result.Length); 'и посмотрите, есть ли какой-либо результат (он дал 128 раз« \ 0 »при использовании Gimp: P – Vegz

+0

он дал мне 128 '\ 0', а не результат свойства, который у меня есть Я использую консольную программу. – Imrik

0

Я решаю это! Проблема была в пути файла. Я должен поместить его в ту же папку, что и файл «.py», и он отлично работает. Я добавляю правильный код:

string python = @"C:\xxx\python.exe"; 
     string myPythonApp = "program.py"; 
     string x = @"file.jpg"; 

     ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(python); 
     myProcessStartInfo.UseShellExecute = false; 
     myProcessStartInfo.RedirectStandardOutput = true; 
     myProcessStartInfo.Arguments = myPythonApp + " " + x; 

     Process myProcess = new Process(); 
     myProcess.StartInfo = myProcessStartInfo; 
     myProcess.StartInfo.CreateNoWindow = true; 
     myProcess.Start(); 
     StreamReader myStreamReader = myProcess.StandardOutput; 
     string myString = myStreamReader.ReadLine(); 
     myProcess.WaitForExit(); 
     myProcess.Close(); 
     textBox1.Text = myString; 
Смежные вопросы