Считать данные из консоли запущенного приложения

Вопросы программирования и использования среды Lazarus.

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

Re: Считать данные из консоли запущенного приложения

Сообщение скалогрыз » 17.11.2020 10:51:28

DYUMON писал(а):AProcess.Options:=[poUsePipes];

обязательно к использованию: [poWaitOnExit,poUsePipes]
а иначе код запускает процесс и забивает на него.

upd: на нифига не нужно этого. Совсем забыл как чтение из процесса делается ))
Последний раз редактировалось скалогрыз 17.11.2020 18:37:19, всего редактировалось 1 раз.
скалогрыз
долгожитель
 
Сообщения: 1756
Зарегистрирован: 03.09.2008 02:36:48

Re: Считать данные из консоли запущенного приложения

Сообщение Ichthyander » 17.11.2020 14:23:23

Я делал так. https://github.com/Al-Muhandis/ShellRem ... d.pas#L428
Код: Выделить всё
FProc:=TProcessUTF8.Create(nil);
  FProc.Options := [poUsePipes, poStderrToOutPut, poNoConsole];
  FProc.Executable:={$IFDEF MSWINDOWS}'cmd'{$ELSE}'sh'{$ENDIF};
  FProc.Execute;


Процедура по считыванию данных из приложения https://github.com/Al-Muhandis/ShellRem ... d.pas#L349

Процедура по отправке данных внешнему приложению https://github.com/Al-Muhandis/ShellRem ... d.pas#L386

Тут есть ньюанс. Поскольку процесс по сути асинхронный, то данные могут поступить в любой момент, поэтому в данном потоке процедура по считыванию (TShellThread.OutputStd) периодически запускается для забора новых данных
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 558
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Считать данные из консоли запущенного приложения

Сообщение zoltanleo » 18.11.2020 15:38:55

Я тут вдохновлялся
https://wiki.lazarus.freepascal.org/Exe ... rograms/ru

В приаттаченном примере косяки с кодировкой при выводе (я их потом решил) и вывод идет в основном потоке (я его потом убрал в дополнительный), но в качестве иллюстрации пойдет
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 397
Зарегистрирован: 17.10.2013 10:55:01

Re: Считать данные из консоли запущенного приложения

Сообщение iskander » 19.11.2020 17:13:37

Стало интересно повозиться с TAsyncProcess. Вроде всё работает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
iskander
постоялец
 
Сообщения: 382
Зарегистрирован: 08.01.2012 18:43:34

Re: Считать данные из консоли запущенного приложения

Сообщение Alex2013 » 19.11.2020 22:38:05

iskander писал(а):Стало интересно повозиться с TAsyncProcess. Вроде всё работает.

Понятно ! Но зачем там "труба" (Pipes) и можно ли заставить TAsyncProcess читать и отслеживать "левую трубу"?
(Есть труба по адресу \\.\pipe\wmrcam тянущая данные из хакнутого WUDFHost, напрямую считать (воссоздав протокол обмена данными) не получилось, но может можно "присосаться" к WMRViewer.exe став "посредине" между ними и "инжектором" WMRInterceptHost.dll сидящем в контексте WUDFHost :?: )
Alex2013
долгожитель
 
Сообщения: 1908
Зарегистрирован: 03.04.2013 11:59:44

Re: Считать данные из консоли запущенного приложения

Сообщение iskander » 20.11.2020 08:22:44

Alex2013 писал(а):Понятно ! Но зачем там "труба" (Pipes)

А ты точно в аттач заглядывал?
Alex2013 писал(а):можно ли заставить TAsyncProcess читать и отслеживать "левую трубу"?

Имхо всё что может TAsyncProcess - запустить приложение и читать/писать его стандартный ввод/вывод.
iskander
постоялец
 
Сообщения: 382
Зарегистрирован: 08.01.2012 18:43:34

Пред.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 6

Рейтинг@Mail.ru