Difference between revisions of "Executing External Programs/nl"
From Free Pascal wiki
Jump to navigationJump to searchLine 33: | Line 33: | ||
AProcess.CommandLine := 'ppc386 -h'; | AProcess.CommandLine := 'ppc386 -h'; | ||
− | // Nu definieren we wat er moet | + | // Nu definieren we wat er moet gebeuren nadat het |
// programma is gestart. In dit geval wachten we met | // programma is gestart. In dit geval wachten we met | ||
// ons programma totdat het gestarte programma is | // ons programma totdat het gestarte programma is |
Revision as of 13:17, 25 March 2005
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.