Executing External Programs
From Free Pascal wiki
Jump to navigationJump to search
Introduction
There are multiple ways to run an external program, but I will only focus on one. TProcess.
TProcess
You can use TProcess to launch external programs. Some of the benefits of using TProcess are that it is:
- Platform Independant
- Capable of reading from stdout and writing to stdin.
A Simple Example
// This is a demo program that shows how to launch // an external program. program launchprogram; // Here we include files that have useful functions // and procedures we will need. uses Classes, SysUtils, Process; // This is defining the var "AProcess" as a variable // of the type "TProcess" var AProcess: TProcess; // This is where our program starts to run begin // Now we will create the TProcess object, and // assign it to the var AProcess. AProcess := TProcess.Create(nil); // Tell the new AProcess what the command to execute is. // Let's use the FreePascal compiler AProcess.CommandLine := 'ppc386 -h'; // We will define an option for when the program // is run. This option will make sure that our program // does not continue until the program we will launch // has stopped running. vvvvvvvvvvvvvv AProcess.Options := AProcess.Options + [poWaitOnExit]; // Now that AProcess knows what the commandline is // we will run it. AProcess.Execute; // This is not reached until ppc386 stops running. AProcess.Free; end.
That's it! You have just learned how to run an external program from inside your own program.
That's nice, but how do I read the Output of a program that I have run?
Well, let's expand our example a little and do just that:
An Improved Example
// This is a demo program that shows how to launch // an external program and read from it's output. program launchprogram; // Here we include files that have useful functions // and procedures we will need. uses Classes, SysUtils, Process; // This is defining the var "AProcess" as a variable // of the type "TProcess" // Also now we are adding a TStringList to store the // data read from the programs output. var AProcess: TProcess; AStringList: TStringList; // This is where our program starts to run begin // Now we will create the TProcess object, and // assign it to the var AProcess. AProcess := TProcess.Create(nil); // Create the TStringList object. AStringList := TStringList.Create; // Tell the new AProcess what the command to execute is. // Let's use the FreePascal compiler AProcess.CommandLine := 'ppc386 -h'; // We will define an option for when the program // is run. This option will make sure that our program // does not continue until the program we will launch // has stopped running. Also now we will tell it that // we want to read the output of the file. AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes]; // Now that AProcess knows what the commandline is // we will run it. AProcess.Execute; // This is not reached until ppc386 stops running. // Now read the output of the program we just ran // into the TStringList. AStringList.Lines.ReadFromStream(AProcess.Output); // Save the output to a file. AStringList.Lines.SaveToFile('c:\output.txt'); // Now that the file is saved we can free the // TStringList and the TProcess. AStringList.Free; AProcess.Free; end.