Difference between revisions of "Executing External Programs/sk"

From Free Pascal wiki
Jump to navigationJump to search
 
m
Line 1: Line 1:
 +
{{Executing External Programs}}
 +
 
== Úvod ==
 
== Úvod ==
  

Revision as of 20:54, 31 January 2006

Deutsch (de) English (en) español (es) français (fr) italiano (it) 日本語 (ja) Nederlands (nl) polski (pl) português (pt) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

Úvod

Je mnoho spôsobov ako spustiť externé programy. Zameriame sa na jeden z nich.

TProcess

Môžete použiť TProcess na spustenie externých programov. Výhody tohoto spôsobu sú:

  • Nezávislý na platforme
  • Schopnosť čítať zo stdin a stdout.

Jednoduchý príklad

// Toto je ukážkový program ktorý vám ukáže ako
// spustiť externý program.
program launchprogram;

// Tu si "použijeme" unity ktoré budeme potrebovať
uses 
  Classes, SysUtils, Process;

// Toto je definícia premennej APRocess
// typu "TProcess"
var 
  AProcess: TProcess;

// Začiatok programu
begin
  // Vytvoríme objekt TProcess
  // pridelíme ho do premennej AProcess
  AProcess := TProcess.Create(nil);

  // Povieme novému procesu aký príkaz má vykonať
  // Použime FPC prekladač
  AProcess.CommandLine := 'ppc386 -h';

  // Definujeme nastavenie pre spustenie.
  // Toto nastavenie zaručí že náš program
  // nebude pokračovať až kým sa proces neskončí
  AProcess.Options := AProcess.Options + [poWaitOnExit];

  // Teraz keď už proces vie čo má robiť
  // ho môžeme spustiť.
  AProcess.Execute;

  // Toto sa dosiahne až po skončení procesu.
  AProcess.Free;   
end.

To je všetko! Práve ste sa naučili ako spustit externý program použitím TProcess.


To je všetko pekné, ale ako získam výstup spusteného programu?

Tak sa na to pozrime, trochu rozšírime náš priklad:

Vylepšený príklad

// Toto je ukážkový program ktorý vám ukáže ako
// spustiť externý program.
program launchprogram;

// Tu si "použijeme" unity ktoré budeme potrebovať
uses 
  Classes, SysUtils, Process;

// Toto je definícia premennej APRocess
// typu "TProcess"
// Teraz pridáme aj TStringList aby sme
// mohli uložiť výstup procesu.
var 
  AProcess: TProcess;
  AStringList: TStringList;

// Začiatok programu
begin
  // Vytvoríme objekt TProcess
  // pridelíme ho do premennej AProcess
  AProcess := TProcess.Create(nil);

  // Vytvoríme TStringList a pridelíme ho
  AStringList := TStringList.Create;

  // Povieme novému procesu aký príkaz má vykonať
  // Použime FPC prekladač
  AProcess.CommandLine := 'ppc386 -h';

  // Definujeme nastavenie pre spustenie.
  // Toto nastavenie zaručí že náš program
  // nebude pokračovať až kým sa proces neskončí
  // Zároveň ho nastavíme tak, aby sme mohli
  // čítať výstup.
  AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];

  // Teraz keď už proces vie čo má robiť
  // ho môžeme spustiť.
  AProcess.Execute;
  
  // Toto sa dosiahne až po skončení procesu.

  // Teraz načítame výstup programu
  // do TStringListu.
  AStringList.Lines.ReadFromStream(AProcess.Output);
  
  // Uložíme výstup do súboru
  AStringList.Lines.SaveToFile('output.txt');

  // Teraz keď je už výstup uložený
  // môžeme uvolniť objekty.
  AStringList.Free;
  AProcess.Free;   
end.