Difference between revisions of "Executing External Programs"
From Free Pascal wiki
Jump to navigationJump to search (Improved formatting) |
m (Made room for other ways to launch a program other than TProcess) |
||
Line 3: | Line 3: | ||
There are multiple ways to run an external program, but I will only focus on one. TProcess. | 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: | You can use TProcess to launch external programs. Some of the benefits of using TProcess are that it is: | ||
Line 8: | Line 9: | ||
*Capable of reading from stdout and writing to stdin. | *Capable of reading from stdout and writing to stdin. | ||
− | ==A Simple Example== | + | ===A Simple Example=== |
// This is a demo program that shows how to launch | // This is a demo program that shows how to launch | ||
// an external program. | // an external program. | ||
Line 54: | Line 55: | ||
Well, let's expand our example a little and do just that: | Well, let's expand our example a little and do just that: | ||
− | ==An Improved Example== | + | ===An Improved Example=== |
// This is a demo program that shows how to launch | // This is a demo program that shows how to launch |
Revision as of 16:48, 14 March 2005
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.