TProcess не могу прочитать вывод

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

TProcess не могу прочитать вывод

Сообщение zub » 16.01.2013 21:31:43

Был fpc271 под win 7 64 - все работало.
Собрал под x86 - не могу прочитать вывод процесса
Код: Выделить всё
  AProcess.Options := AProcess.Options + [poUsePipes, poNoConsole];
  AProcess.Execute;

  AStringList := TStringList.Create;
  AMemoryStream := TMemoryStream.Create;

   BytesRead := 0;
  szBuffer := '';
  if AProcess.Running then
  begin
  while (AProcess.Running)or(AProcess.Output.NumBytesAvailable>0) do
  begin
    n := AProcess.Output.NumBytesAvailable;
....................

n всегда нулевой. запускаемая программа x86 если убрать [poUsePipes, poNoConsole] - она запускается в новой консоли нормально, такое впечатление что при появлении poUsePipes программа запускается, но не работает
при этом если запустить в tprocess например системный ping - все ок

Добавлено спустя 6 минут 36 секунд:
походу дело в запускаемой программе - она тоже скомпилирована fpc, старенький консольный rar нормально запускается и его вывод читается
В чем может быть проблема?

Добавлено спустя 17 минут 39 секунд:
Да, пересобрал ее 2.7.1 (до этого была собрана 2.6.0) всё заработало
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: TProcess не могу прочитать вывод

Сообщение Ism » 16.01.2013 22:44:44

sl:TStringList;
Process1:TProcess;

Process1.Execute;
sl := TStringList.Create;
sl.LoadFromStream(Process1.Output);
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: TProcess не могу прочитать вывод

Сообщение zub » 16.01.2013 23:28:42

Нет, нужно получать вывод процесса не после его завершения, а пока он работает и посылать ему в консоль нужные данные. Но вроде все заработало - спишу на непонятный глюк 2.6.0 неизвестной сборки.
Это небольшая гуи обертка над консольными программами типа такой:
Код: Выделить всё
program aplusb;
uses sysutils;
var
  a,b,c:double;
begin
     DecimalSeparator:='.';
     writeln('Hi! It A+B program!');
     writeln('Please enter A');
     readln(a);
     writeln('Please enter B');
     readln(b);
     c:=a+b;
     write(format('A+B=%F',[c]));
end.

Собственно эта aplusb и нехотела запускаться.
Пользователь в гуе вводит нужные данные, они скармливаются консольной программе и от нее получается результат.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: TProcess не могу прочитать вывод

Сообщение alexs » 17.01.2013 01:20:26

Посмотри TAsyncProcess - Он позволяет читать вывод по мере его появления
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru
cron