Difference between revisions of "Executing External Programs/nl"

From Lazarus wiki
Jump to navigationJump to search
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{Executing External Programs}}
 +
 
== Inleiding ==
 
== 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.
 
Er zijn verschillende manieren om een extern programma uit te laten voeren. We richten ons nu op een manier, namelijk het gebruik van TProcess.
 +
 +
PAS OP!
 +
 +
De getoonde code is te simpel, het werkt wel maar de originele auteur wijst er op dat het programma op deze manier kan "hangen", wil je weten hoe e.e.a. goed gedaan moet worden lees dan de Engelse versie.
 +
Als ik de tijd weer heb zal ik een goede Nederlandse tekst produceren.
 +
Een opmerking naar de auteur van deze tekst: Prima dat je wilt vertalen, maar doe het dan zo exact en volledig mogelijk.
  
 
==TProcess==
 
==TProcess==
Line 18: Line 26:
 
   Classes, SysUtils, Process;
 
   Classes, SysUtils, Process;
 
   
 
   
  // This is defining the var "AProcess" as a variable
+
  // Hier definieren we de variabele aProcess van het
  // of the type "TProcess"
+
  // type "TProcess"
 
  var  
 
  var  
   AProcess: TProcess;
+
   aProcess: TProcess;
 
   
 
   
  // This is where our program starts to run
+
  // Hier begint ons programma
 
  begin
 
  begin
   // Now we will create the TProcess object, and
+
   // Allereerst maken we een instantie van het TProcess
   // assign it to the var AProcess.
+
   // object en kennen dat toe aan aProcess
   AProcess := TProcess.Create(nil);
+
   aProcess := TProcess.Create(nil);
 
   
 
   
   // Tell the new AProcess what the command to execute is.
+
   // Welk commando gaan we uitvoeren?
   // Let's use the FreePascal compiler
+
   // Voor deze keer voeren we de FPC compiler uit.
 
   AProcess.CommandLine := 'ppc386 -h';
 
   AProcess.CommandLine := 'ppc386 -h';
 
   
 
   
   // We will define an option for when the program
+
   // Nu definieren we wat er moet gebeuren nadat het
   // is run. This option will make sure that our program
+
   // programma is gestart. In dit geval wachten we met
   // does not continue until the program we will launch
+
   // ons programma totdat het gestarte programma is   
   // has stopped running.               vvvvvvvvvvvvvv
+
   // afgelopen.                         vvvvvvvvvvvvvv
 
   AProcess.Options := AProcess.Options + [poWaitOnExit];
 
   AProcess.Options := AProcess.Options + [poWaitOnExit];
 
   
 
   
   // Now that AProcess knows what the commandline is
+
   // Nu weet aProcess wat er moet gebeuren, dus laten
   // we will run it.
+
   // we het uitvoeren.
 
   AProcess.Execute;
 
   AProcess.Execute;
 
   
 
   
   // This is not reached until ppc386 stops running.
+
   // Hier komen we dus pas als ppc386 gestopt is.
 
   AProcess.Free;   
 
   AProcess.Free;   
 
  end.
 
  end.
  
That's it! You have just learned how to run an external program from inside your own program.
+
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?
  
That's nice, but how do I read the Output of a program that I have run?
+
Goed om dat te laten zien, zullen we het voorbeeld een beetje uitbreiden:
  
Well, let's expand our example a little and do just that:
+
===Een uitgebreider voorbeeld===
  
===An Improved Example===
+
  // Dit is een demo programma dat laat zien hoe je een
 
+
  // extern programma kunt uitvoeren en de uitvoer opvangen.
  // This is a demo program that shows how to launch
 
  // an external program and read from it's output.
 
 
  program launchprogram;
 
  program launchprogram;
 
   
 
   
  // Here we include files that have useful functions
+
  // De te gebruiken units
// and procedures we will need.
 
 
  uses  
 
  uses  
 
   Classes, SysUtils, Process;
 
   Classes, SysUtils, Process;
 
   
 
   
  // This is defining the var "AProcess" as a variable
+
  // We definieren nu een extra variabele erbij om de uitvoer
  // of the type "TProcess"
+
  // van het uitgevoerde programma op te slaan.
// Also now we are adding a TStringList to store the
 
// data read from the programs output.
 
 
  var  
 
  var  
 
   AProcess: TProcess;
 
   AProcess: TProcess;
 
   AStringList: TStringList;
 
   AStringList: TStringList;
 
   
 
   
  // This is where our program starts to run
+
  // Hier begint ons programma
 
  begin
 
  begin
   // Now we will create the TProcess object, and
+
   // Allereerst maken we een instantie van het TProcess
   // assign it to the var AProcess.
+
   // object en kennen dat toe aan aProcess
 
   AProcess := TProcess.Create(nil);
 
   AProcess := TProcess.Create(nil);
 
   
 
   
   // Create the TStringList object.
+
   // Het TStringList object maken.
 
   AStringList := TStringList.Create;
 
   AStringList := TStringList.Create;
 
   
 
   
   // Tell the new AProcess what the command to execute is.
+
   // Welk commando gaan we uitvoeren?
   // Let's use the FreePascal compiler
+
   // Voor deze keer voeren we de FPC compiler uit.
 
   AProcess.CommandLine := 'ppc386 -h';
 
   AProcess.CommandLine := 'ppc386 -h';
 
   
 
   
   // We will define an option for when the program
+
   // Nu definieren we wat er moet gebeuren nadat het
   // is run. This option will make sure that our program
+
   // programma is gestart. In dit geval wachten we met
   // does not continue until the program we will launch
+
   // ons programma totdat het gestarte programma is    
   // has stopped running. Also now we will tell it that
+
   // afgelopen.                         vvvvvvvvvvvvvv
   // we want to read the output of the file.
 
 
   AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
 
   AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
 
   
 
   
   // Now that AProcess knows what the commandline is
+
   // Nu weet aProcess wat er moet gebeuren, dus laten
   // we will run it.
+
   // we het uitvoeren.
 
   AProcess.Execute;
 
   AProcess.Execute;
 
+
 
   // This is not reached until ppc386 stops running.
+
   // Hier komen we oas als ppc386 gestopt is.
 
   
 
   
   // Now read the output of the program we just ran
+
   // Nu gaan we de uitvoer van het programma opslaan
   // into the TStringList.
+
   // in de TStringList.
 
   AStringList.Lines.ReadFromStream(AProcess.Output);
 
   AStringList.Lines.ReadFromStream(AProcess.Output);
 
    
 
    
   // Save the output to a file.
+
   // Dit slaan we dan weer op in een bestand.
 
   AStringList.Lines.SaveToFile('c:\output.txt');
 
   AStringList.Lines.SaveToFile('c:\output.txt');
 
   
 
   
   // Now that the file is saved we can free the
+
   // En dan nu de stringlist en het process weer vrijgeven.
  // TStringList and the TProcess.
 
 
   AStringList.Free;
 
   AStringList.Free;
 
   AProcess.Free;   
 
   AProcess.Free;   
 
  end.
 
  end.

Latest revision as of 19:01, 17 March 2013

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)

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.

PAS OP!

De getoonde code is te simpel, het werkt wel maar de originele auteur wijst er op dat het programma op deze manier kan "hangen", wil je weten hoe e.e.a. goed gedaan moet worden lees dan de Engelse versie. Als ik de tijd weer heb zal ik een goede Nederlandse tekst produceren. Een opmerking naar de auteur van deze tekst: Prima dat je wilt vertalen, maar doe het dan zo exact en volledig mogelijk.

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.