#c# #.net #asp.net #perl
#c# #.net #asp.net #perl
Вопрос:
Я пытаюсь использовать System.Diagnostics.Process
класс для запуска Perl-скрипта из ASP.NET приложение. Команда Perl выполняется нормально, когда я ввожу ее в командную строку, но когда ASP.NET пытается запустить ту же команду, но не работает.
Я подозреваю, что это может быть связано с потоком ввода и вывода. Выполнение Perl-скрипта до завершения в командной строке занимает много времени. Но в .NET команда возвращается почти сразу, и когда я пытаюсь перенаправить стандартный вывод Perl-скрипта, чтобы посмотреть, какие выдаются сообщения, он показывает только первую строку и возвращает результат. Использование методов чтения блокирующего потока этого не исправляет; .NET действительно думает, что Perl-скрипт выводит только одну строку, а затем завершает работу.
Есть предложения? Как бы мне ни хотелось, скрипт нельзя переписать в .NET. Вот код, который я использую для запуска процесса. Я пытался перейти ReadToEnd()
на серию ReadLine()
вызовов, но после того, как первый вызов возвращает первую строку вывода, следующий вызов возвращает null.
Process proc = new Process();
proc.StartInfo.FileName = scriptPath;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first line
proc.WaitForExit();
Ответ №1:
Переключите 2 последние строки:
lineproc.WaitForExit();
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first
или создайте цикл, который продолжает чтение из proc.Стандартный вывод до завершения работы скрипта.