|
|
Line 1: |
Line 1: |
− | {{Executing External Programs}}
| |
| | | |
− | == Inleiding ==
| |
− |
| |
− | Er zijn verschillende manieren om een extern programma uit te laten voeren. We richten ons nu op een manier, namelijk het gebruik van TProcess.
| |
− |
| |
− | ==TProcess==
| |
− | TProcess wordt gebruikt om een extern programma uit te laten voeren. Een paar voordelen van het gebruik van TProcess boven andere manieren zijn:
| |
− |
| |
− | *Platform onafhankelijk.
| |
− | *Het geeft ook de mogelijkheid om te schrijven naar stdout en te lezen van stdin.
| |
− |
| |
− | ===Een eenvoudig voorbeeld===
| |
− | // Dit is een demo prograamma dat laat zien hoe je
| |
− | // een extern programma kunt uitvoeren.
| |
− | program launchprogram;
| |
− |
| |
− | // De te gebruiken units.
| |
− | uses
| |
− | Classes, SysUtils, Process;
| |
− |
| |
− | // Hier definieren we de variabele aProcess van het
| |
− | // type "TProcess"
| |
− | var
| |
− | aProcess: TProcess;
| |
− |
| |
− | // Hier begint ons programma
| |
− | begin
| |
− | // Allereerst maken we een instantie van het TProcess
| |
− | // object en kennen dat toe aan aProcess
| |
− | aProcess := TProcess.Create(nil);
| |
− |
| |
− | // Welk commando gaan we uitvoeren?
| |
− | // Voor deze keer voeren we de FPC compiler uit.
| |
− | AProcess.CommandLine := 'ppc386 -h';
| |
− |
| |
− | // Nu definieren we wat er moet gebeuren nadat het
| |
− | // programma is gestart. In dit geval wachten we met
| |
− | // ons programma totdat het gestarte programma is
| |
− | // afgelopen. vvvvvvvvvvvvvv
| |
− | AProcess.Options := AProcess.Options + [poWaitOnExit];
| |
− |
| |
− | // Nu weet aProcess wat er moet gebeuren, dus laten
| |
− | // we het uitvoeren.
| |
− | AProcess.Execute;
| |
− |
| |
− | // Hier komen we dus pas als ppc386 gestopt is.
| |
− | AProcess.Free;
| |
− | end.
| |
− |
| |
− | Simpel he! Je hebt nu gezien hoe je een ander programma kunt uitvoeren vanuit je eigen programma!
| |
− |
| |
− |
| |
− | Dat is wel leuk, maar hoe kan ik de output van een programma dan opvangen, zodat ik er wat mee kan doen?
| |
− |
| |
− | Goed om dat te laten zien, zullen we het voorbeeld een beetje uitbreiden:
| |
− |
| |
− | ===Een uitgebreider voorbeeld===
| |
− |
| |
− | // Dit is een demo programma dat laat zien hoe je een
| |
− | // extern programma kunt uitvoeren en de uitvoer opvangen.
| |
− | program launchprogram;
| |
− |
| |
− | // De te gebruiken units
| |
− | uses
| |
− | Classes, SysUtils, Process;
| |
− |
| |
− | // We definieren nu een extra variabele erbij om de uitvoer
| |
− | // van het uitgevoerde programma op te slaan.
| |
− | var
| |
− | AProcess: TProcess;
| |
− | AStringList: TStringList;
| |
− |
| |
− | // Hier begint ons programma
| |
− | begin
| |
− | // Allereerst maken we een instantie van het TProcess
| |
− | // object en kennen dat toe aan aProcess
| |
− | AProcess := TProcess.Create(nil);
| |
− |
| |
− | // Het TStringList object maken.
| |
− | AStringList := TStringList.Create;
| |
− |
| |
− | // Welk commando gaan we uitvoeren?
| |
− | // Voor deze keer voeren we de FPC compiler uit.
| |
− | AProcess.CommandLine := 'ppc386 -h';
| |
− |
| |
− | // Nu definieren we wat er moet gebeuren nadat het
| |
− | // programma is gestart. In dit geval wachten we met
| |
− | // ons programma totdat het gestarte programma is
| |
− | // afgelopen. vvvvvvvvvvvvvv
| |
− | AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
| |
− |
| |
− | // Nu weet aProcess wat er moet gebeuren, dus laten
| |
− | // we het uitvoeren.
| |
− | AProcess.Execute;
| |
− |
| |
− | // Hier komen we oas als ppc386 gestopt is.
| |
− |
| |
− | // Nu gaan we de uitvoer van het programma opslaan
| |
− | // in de TStringList.
| |
− | AStringList.Lines.ReadFromStream(AProcess.Output);
| |
− |
| |
− | // Dit slaan we dan weer op in een bestand.
| |
− | AStringList.Lines.SaveToFile('c:\output.txt');
| |
− |
| |
− | // En dan nu de stringlist en het process weer vrijgeven.
| |
− | AStringList.Free;
| |
− | AProcess.Free;
| |
− | end.
| |