Запуск внешнего приложения

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

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

Запуск внешнего приложения

Сообщение Александр Яшин » 15.02.2010 11:42:26

Как запустить внешнее приложение из своего в Linux? Ну, например, текстовый редактор KWrite.
Именно в Linux. В Windows можно функцией ShellExecute().
Александр Яшин
новенький
 
Сообщения: 67
Зарегистрирован: 21.11.2009 09:31:01

Re: Запуск внешнего приложения

Сообщение Light13 » 15.02.2010 12:11:42

ExecuteProcess?
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Запуск внешнего приложения

Сообщение coyot.rush » 15.02.2010 12:44:52

Код: Выделить всё
Uses libc;
....
procedure run();
begin
libc.system(Pcahr('kwrite'));
end;

PS что основное приложение не "повисло" используйте потоки (TThread)
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Запуск внешнего приложения

Сообщение WAYFARER » 15.02.2010 20:16:54

Или можно так.

Код: Выделить всё
Uses unix;
....
procedure run();
begin
shell('kwrite');
end;
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Запуск внешнего приложения

Сообщение Александр Яшин » 15.02.2010 21:49:27

Спасибо!
Работают оба способа. Вопрос - какой способ лучше.
Внешне второй смотрится, ну, а как на самом деле?
С потоками как-то еще не приходилось сталкиваться.
Но, вроде и без них ничего не зависает.
Пробовал запускать из своего приложения Maple
с достаточно сложными вычислениями (решение дифф. уравнения)
и ничего, не зависало!
Александр Яшин
новенький
 
Сообщения: 67
Зарегистрирован: 21.11.2009 09:31:01

Re: Запуск внешнего приложения

Сообщение MasteRaf » 05.06.2010 21:15:33

Запускаю внешнее приложение с помощью Tprocess http://wiki.lazarus.freepascal.org/Exec ... rograms/ru
А как допустим запустить сразу файл этого приложения, например электронную таблицу .ods OpenOffice ?
MasteRaf
новенький
 
Сообщения: 10
Зарегистрирован: 05.06.2010 21:10:25

Re: Запуск внешнего приложения

Сообщение coyot.rush » 05.06.2010 22:06:12

Пробовал запускать из своего приложения Maple
с достаточно сложными вычислениями (решение дифф. уравнения)
и ничего, не зависало!

Под "подвисло" я понимаю временное остановку основного цикла обработки сообщений LCL (MSE) от пользователя. Для консольный приложений это норма, но гуи приложения выглядят, так как будто в них возник сбой

Работают оба способа. Вопрос - какой способ лучше.
Внешне второй смотрится, ну, а как на самом деле?


В обоих случаях вызываться отдельный шелл (оболочка)
Во втором случае должно работать на всех Unix системах
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Запуск внешнего приложения

Сообщение Odyssey » 05.06.2010 22:49:48

MasteRaf писал(а):Запускаю внешнее приложение с помощью Tprocess http://wiki.lazarus.freepascal.org/Exec ... rograms/ru
А как допустим запустить сразу файл этого приложения, например электронную таблицу .ods OpenOffice ?

Кроссплатформенного способа не знаю, и сомневаюсь что он есть. Под Windows можно через ShellExecute, под Linux в голову приходит только поиск OpenOffice и запуск его с передачей файла в параметре командной строки. Что-то похожее сделано в Lazarus для запуска браузера, см. lcl/lclintf.pas, function FindDefaultBrowser.

Если оформить это дело в виде отдельной функции с IFDEF'ами для каждой платформы, типа
Код: Выделить всё
function LaunchOpenOffice(const OpenDocumentFilename: string): Boolean;

думаю она была бы полезна не только вам.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Запуск внешнего приложения

Сообщение MasteRaf » 05.06.2010 23:06:03

Odyssey писал(а): под Linux в голову приходит только поиск OpenOffice и запуск его с передачей файла в параметре командной строки.

Да я в Линуксе нуб полный :oops:
ищу, ищу этот OpenOffice-заколебался ) в терминале пишешь "ooffice -calc" и запускает. А полный путь до него кто бы подсказал, чтоб в прогу вставить.
Ещё пытаюсь в терминале открыть файл и получаю:
Код: Выделить всё
master@master-desktop ~/.wine/drive_c/lazarus $ ./test.ods
invalid file (bad magic number): Exec format error
MasteRaf
новенький
 
Сообщения: 10
Зарегистрирован: 05.06.2010 21:10:25

Re: Запуск внешнего приложения

Сообщение скалогрыз » 05.06.2010 23:22:14

MasteRaf писал(а):Да я в Линуксе нуб полный :oops:
ищу, ищу этот OpenOffice-заколебался ) в терминале пишешь "ooffice -calc" и запускает. А полный путь до него кто бы подсказал, чтоб в прогу вставить.


так и попробуй команду:
Код: Выделить всё
which ooffice
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Запуск внешнего приложения

Сообщение MasteRaf » 05.06.2010 23:38:01

Нашел вроде.
Только прога, при такой попытке
Код: Выделить всё
AProcess.CommandLine := 'usr/bin/ooffice';

выдает "Failed to execute usr/bin/ooffice : 2"
MasteRaf
новенький
 
Сообщения: 10
Зарегистрирован: 05.06.2010 21:10:25

Re: Запуск внешнего приложения

Сообщение скалогрыз » 05.06.2010 23:52:57

MasteRaf писал(а):Нашел вроде.
Только прога, при такой попытке
Код: Выделить всё
AProcess.CommandLine := 'usr/bin/ooffice';

выдает "Failed to execute usr/bin/ooffice : 2"


попробуй так:
Код: Выделить всё
AProcess.CommandLine := '/usr/bin/ooffice';


поверь, слеш в начале пути не случаен ;)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Запуск внешнего приложения

Сообщение MasteRaf » 05.06.2010 23:59:47

скалогрыз писал(а):поверь, слеш в начале пути не случаен ;)

аааааааа !!! шайтан-ака!!! круто-круто :lol:
Делаю так теперь:
Код: Выделить всё
   AProcess.CommandLine := '/usr/bin/ooffice -calc "/home/master/.wine/drive_c/lazarus/test.ods"'

и всё пучком) спасибо
MasteRaf
новенький
 
Сообщения: 10
Зарегистрирован: 05.06.2010 21:10:25

Re: Запуск внешнего приложения

Сообщение скалогрыз » 06.06.2010 00:07:50

MasteRaf писал(а):Как теперь передать имя файла, который надо открыть?

Капитан Очевидность твердит, что-то вроде
Код: Выделить всё
AProcess.CommandLine := '/usr/bin/ooffice -calc "'+FileName+'"';

где FileName это имя файла, который нужно открыть.

но сий вопрос должен быть задан на форуме Open Office ^^
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Запуск внешнего приложения

Сообщение MasteRaf » 06.06.2010 11:06:09

Теперь встал такой вопрос - как правильно оформить синтаксис выбора этого файла через OpenDialog ?
Код: Выделить всё
...
with OpenDialog1 do
      if Execute then
         begin
....
    AProcess.CommandLine := '/usr/bin/ooffice -calc  "'+FileName+'"';

Проблема в том, что OpenDialog передает в переменную FileName строку C:/ARM/test.ods
А терминал работает нормально с таким путем /home/master/.wine/drive_c/ARM/test.ods
Как быть?
Я грешу на то, что ставил lazarus-0.9.28.2-fpc-2.2.4-win32.exe в Linux Mint 8.1 "Росинка" x86, и работаю сейчас так.
Скачивал lazarus-0.9.28.2-0.i586.rpm, но не смог поставить, разобраться. Может в lazarus под Linux OpenDialog передает как раз путь вида /home/master/.wine/drive_c/ARM/test.ods ?
Последний раз редактировалось MasteRaf 06.06.2010 12:05:10, всего редактировалось 1 раз.
MasteRaf
новенький
 
Сообщения: 10
Зарегистрирован: 05.06.2010 21:10:25

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru