Lazarus - uruchamianie aplikacji konsolowej w Linuksie

Lazarus - uruchamianie aplikacji konsolowej w Linuksie
WO
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 3 lata
0

Witam,

działam na xUbuntu i mam Lazarusa 2.0.12. Próbuję uruchomić program zewnętrzny napisany w języku Fortran i skompilowany na tym samym komputerze (plik wykonywalny ma nazwę drgania.out). Procedura wygląda następująco:

Kopiuj
procedure TFG.KlawiszUruchomClick(Sender: TObject);
var
  RunProgram : TProcess;
begin
  try
  SetCurrentDir(Katalog);
  {$IFDEF Windows}
  RunProgram := TProcess.Create(nil);
  RunProgram.Executable := 'drgania.exe';
  RunProgram.Parameters.Add('');
  RunProgram.Execute;
  {$ENDIF Windows}
  {$IFDEF Unix}
  RunProgram := TProcess.Create(nil);
//  RunProgram.Executable := './drgania.out';
  RunProgram.CommandLine := 'drgania.out';
  RunProgram.Options:=RunProgram.Options+[poWaitOnExit];
  RunProgram.Execute;
  {$ENDIF Unix}
  finally
  RunProgram.Free;
  end;
end; 

Pod Windowsem wszystko działa jak należy. W Linuksie próbowałem następujące warianty (z pełną ścieżką lub bez):

Kopiuj
RunProgram.Executable := './drgania.out';
RunProgram.CommandLine := './drgania.out';
RunProgram.Executable := 'drgania.out';
RunProgram.CommandLine := 'drgania.out';

Sprawdziłem, że aplikacje okienkowe, np. ParaView, się uruchamiają.

Dodam, że kiedyś nie miałem problemów z tym zadaniem - pojawiły się po którejś aktualizacji Lazarusa (chyba).

Dodam, że przeglądałem już różne strony (np. na stronie https://wiki.freepascal.org/Executing_External_Programs jest przykład jak uruchomić kompilator ppc386) i próbowałem wielu opcji, ale nic to nie dało. Po naciśnięciu klawisza uruchamiającego program nie dostaję żadnych komunikatów błędu - po prostu nic się nie dzieje.

Próbowałem również dodać informacje o shellu (mam basha), ale nie udało mi się rozwiązać problemu.

Będę wdzięczny za pomoc. Program - a konkretnie nakładkę na aplikację konsolową - pokazuję Studentom na zajęciach z programowania. W tym roku również chciałem to zrobić, ale moje stare przykłady nie działają.

Pozdrawiam z Olsztyna,

Wojciech Sobieski.

edytowany 1x, ostatnio: flowCRANE
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Czy ten program jest aplikacją konsolową?

Jeśli tak, to strzelam, że zamiast odpalać tę aplikację bezpośrednio powinieneś uruchamiać emulator terminala - np. jeśli korzystasz z Alacritty, to:

Kopiuj
RunProgram.Executable := 'alacritty';
RunProgram.CommandLine := './drgania.out';

AFAIR Windows odpala emulator terminala automatycznie, ale większość distro linuksowych nie.


edytowany 2x, ostatnio: Patryk27
SK
Albo samo: RunProgram.CommandLine := '/bin/sh drgania.out'
WO
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 3 lata
0

Dzięki za odpowiedź.

Tak, drgania.out to aplikacja konsolowa.

Przy próbie instalacji alacrity dostaję komunikat:

Pakiet alacritty nie ma dostępnej wersji, ale odnosi się do niego inny pakiet.
Zazwyczaj oznacza to, że pakietu brakuje, został zastąpiony przez inny
pakiet lub nie jest dostępny przy pomocy obecnie ustawionych źródeł.
Jednak następujące pakiety go zastępują:

Kopiuj
ncurses-term

Zainstalowałem ncurses-term, ale np. coś takiego nie działa (może coś jeszcze trzeba skonfigurować?):

Kopiuj
RunProgram.Executable := 'ncurses-term';
RunProgram.CommandLine := './drgania.out';

Do czego właściwie służą te dwie instrukcje powyżej? Myślałem, że Executable to właśnie nazwa programu, który chcemy uruchomić.

Mam inny program sprzed kilku lat i tam działała taka wersja (kompilując program obecnie nie działa):

Kopiuj
RunProgram.Executable:='/home/wojciech/Pulpit/HookGUI/hook.out';

Pamiętam, że kiedyś działało coś takiego (nie jestem pewien czy dobrze pamiętam, ale była tam nazwa terminala i polecenie do wykonania):

Kopiuj
RunProgram.Executable:='/bin/bash/ hook.out';

Na razie stan jest taki, że nie wiedziałem i nadal nie wiem.

Pozdrawiam z Olsztyna,

Wojciech Sobieski.

edytowany 1x, ostatnio: flowCRANE
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Przy próbie instalacji alacrity dostaję komunikat:

ubuntu alacritty w Google odpowiada, że do instalacji potrzebne jest odrębne PPA (https://ubuntuhandbook.org/index.php/2020/12/install-alacritty-ppa-ubuntu-20-04/) - ale to nie ma znaczenia, bo Alacritty podałem jedynie jako przykład :-)

W Ubuntu domyślnym emulatorem terminala najwyraźniej jest gnome-terminal, więc bez instalacji niczego dodatkowego coś takiego powinno zadziałać:

Kopiuj
RunProgram.Executable := 'gnome-terminal';
RunProgram.Parameters.Add('-x'); // -x to komenda gnome-terminal, która określa program do uruchomienia
RunProgram.Parameters.Add('./drgania.out');

edytowany 3x, ostatnio: Patryk27
Patryk27
Ewentualnie zamiast -x spróbuj -e; nie mam tego akurat terminala pod ręką, a internet podpowiada obydwie opcje :-)
WO
  • Rejestracja:około 21 lat
  • Ostatnio:ponad 3 lata
0

W końcu poszło coś takiego (przy czym w xUbuntu terminal domyślny to xfce4-terminal):

Kopiuj
  RunProgram.Executable := 'xfce4-terminal';
  RunProgram.Parameters.Add('-x');
  RunProgram.Parameters.Add('./drgania.out');  

Sprawa rozwiązana - jak już to widzę, to wszystko mi się zgadza. Bardzo Ci dziękuję za pomoc.

Pozdrawiam z Olsztyna,

Wojciech Sobieski.

edytowany 1x, ostatnio: flowCRANE

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.