TProcess & (*) Parameter

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

TProcess & (*) Parameter

Beitragvon Mathias » 24. Nov 2017, 21:14 TProcess & (*) Parameter

Folgender Code lädt, wie erwartet die beiden Units in die Memo1.
Code: Alles auswählen
var
  AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.Executable := '/bin/cat';
//  AProcess.Parameters.Add('*.pas');
  AProcess.Parameters.Add('unit1.pas');
  AProcess.Parameters.Add('unit2.pas');
  AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
  AProcess.Execute;
 
  Memo1.Lines.LoadFromStream(AProcess.Output);

Ersetze ich die beiden Add Zeilen durch '*.pas', dann bleibt das Memo leer.

Gebe ich aber direkt in der Konsole
Code: Alles auswählen
cat *.pas
ein, dann wird der Text der beiden Units wie erwartet ausgegeben.

Wieso ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 24. Nov 2017, 23:44 Re: TProcess & (*) Parameter

Das *.pas wird nicht von cat in die verschiedenen Dateinamen aufgelöst sondern von deiner Konsole/Shell. Das Ganze heißt filename expansion oder globbing.
In Free Pascal kannst du das mit mit der Funktion FindAllFiles machen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2546
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon af0815 » 25. Nov 2017, 07:17 Re: TProcess & (*) Parameter

Kurz gesagt, TProcess ist/hat keine Shell. Damit geht das erweitern der Wildcards und anderes nicht. Siehe auch in der Wiki.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3479
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Mathias » 25. Nov 2017, 17:45 Re: TProcess & (*) Parameter

Ich sehe da nicht durch.

Mache ich folgendes, anstelle von cat nehme ich ein Lazarus-Project und gebe diesem den *.pas Parameter mit, dann kommt dieser dort auch an.
Code: Alles auswählen
procedure TForm1.Button3Click(Sender: TObject);
var
  AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.Executable := 'project1';
  AProcess.Parameters.Add('*.pas');
  AProcess.Parameters.Add('-para');
  AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
  AProcess.Execute;
 
  Memo1.Lines.LoadFromStream(AProcess.Output); // Hier kommt alles schön retour, wie erwartet.
 
  AProcess.Free;
end;


Hier wird alles empfangen, inklusive *.pas .
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to  ParamCount do begin
    Writeln('Parameter ', i, '= ', ParamStr(i));
    ShowMessage(ParamStr(i));
  end;
end;


Wieso ist das bei /bin/cat nicht der Fall ?
Mit /bin/ls geht es auch nicht.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon MacWomble » 25. Nov 2017, 18:20 Re: TProcess & (*) Parameter

Ich habe das bei meinem Problem im anderen Thread so gelöst:

Code: Alles auswählen
RunCommand('sh -c "cat ' + QuellDatei + ' | formail -X FROM:  -X subject > ' + '/tmp/header.txt"' , Result);


Wichtig waren die umschließenden doppelten Anführungstzeichen. Auch bei mir trat das Problem in Verbindung mit cat auf, andere Befehlszeilen funktionieren auch hier.

Ich verwende RunCommand da ich es übersichtlicher finde, aber er ist als depricated markiert!
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 591
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19 Cinnamon / CodeTyphon Generation V Plan 6.60 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried