2013-04-15 4 views
1

У меня есть код C#, который использует командную строку для вызова сценария python. Для выполнения скрипта требуется около 25 секунд. При запуске в командной строке сценарий python имеет несколько выходов до окончательного вывода «done». Мой код C# запускает скрипт, но никогда не закрывает командную строку, если я использую «WaitForExit». Поэтому я считаю, что мне нужна какая-то логика, чтобы проверить, было ли сделано «сделано», но Интернет не очень помог с методологией.Отображение результата работающего cmd-процесса

Вот что у меня есть, оно в настоящее время выводит только первую строку «Microsoft Windows [Version 6.1.7601]». Очевидно, ничего хорошего.

var p = new Process(); 
p.StartInfo.FileName = "cmd.exe"; 
p.StartInfo.WorkingDirectory = @"C:\Optimization"; 
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardInput = true; 


p.Start(); 


p.StandardInput.WriteLine(@"ipy spot_for_labview.py"); 

    StreamReader mySR = p.StandardOutput; 
    string mystr = mySR.ReadLine(); 
    Debug.WriteLine(mystr); 



p.WaitForExit(25000); //25000 is a placeholder until better method found. 

p.Close(); 

Если есть в любом случае, чтобы закрыть процесс после того, как он закончит, или получить все выходные CMD я все уши.

Любая помощь приветствуется.

+0

Ваше первое предложение не кажется, выводить что угодно. Я не вижу, как это может работать без какой-либо структуры событий или цикла, когда он впервые попадает в строку «Debug.WriteLine», результат, который мне нужен, еще не произошел. Если я использую p.BeginOutputReadLine(), какой другой метод мне нужно использовать для захвата вывода? Я не могу использовать p.StandardOutput, по-видимому, это синхронизация. –

+0

это Так ссылка может помочь !!! - http://stackoverflow.com/questions/206323/how-to-execute-command-line-in-c-get-std-out-results – dekdev

+0

Похоже, что process.BeginOutputReadLine() - это все, что необходимо, и это делает все видно? Не работает в моем случае. –

ответ

1

Вы пробовали это мероприятие? Process.OutputDataReceived Событие

или Process.ErrorDataReceived Event

здесь код из MSDN

Process sortProcess; 
    sortProcess = new Process(); 
    sortProcess.StartInfo.FileName = "Sort.exe"; 
    sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler); 

... .... ...

private static void SortOutputHandler(object sendingProcess, 
      DataReceivedEventArgs outLine) 
     { 
} 
+0

Да, я не мог заставить это работать. Он выводит все, но не до тех пор, пока я не закрою командную строку вручную. –

+0

Вы использовали файл cmd.exe -Q python.exe? http://ss64.com/nt/cmd.html – dekdev

+0

По существу. Нет -Q, хотя. Я не уверен, что будет делать -Q ...? –

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