AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Delphi Chmod oder andere cmd's ausführen unter macOS

Ein Thema von softtouch · begonnen am 29. Aug 2022 · letzter Beitrag vom 2. Sep 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 29. Aug 2022, 17:48
Kennt jemand einen Weg chmod oder andere executable auszuführen und deren Rückgabe auch zu erhalten?

Den Code, den ich soweit gefunden habe, hängt sich aber auf.

Delphi-Quellcode:
const
   libc = '/usr/lib/libc.dylib';

   IFT_ETHER = $6;

type
PIOFile = Pointer;

function getifaddrs(var ifap: pifaddrs): Integer; cdecl; external libc name _PU + 'getifaddrs'; {$EXTERNALSYM getifaddrs}
procedure freeifaddrs(ifp: pifaddrs); cdecl; external libc name _PU + 'freeifaddrs'; {$EXTERNALSYM freeifaddrs}
function popen(const Command: PAnsiChar; Modes: PAnsiChar): PIOFile; cdecl;   external libc name _PU+'popen';
function pclose(Stream: PIOFile): Integer; cdecl; external libc name _PU+'pclose';
function feof(Stream: PIOFile): Integer; cdecl; external libc name _PU+'feof';
function fread(Ptr: Pointer; Size: LongWord; N: LongWord; Stream: PIOFile): LongWord; cdecl; external libc name _PU+'fread';
function wait(__stat_loc: PInteger): Integer; cdecl; external libc name _PU+'wait';


procedure ExecCmdLine(const CmdLine: string; CmdResult: TStrings);
var
   Output: PIOFile;
   Buffer: PAnsiChar;
   TempString: ansistring;
   Line: ansistring;
   BytesRead: Integer;
const
   BufferSize: Integer = 8192;
begin
   TempString := '';
   Output := popen(PAnsiChar(ansistring(CmdLine)), 'r');
   GetMem(Buffer, BufferSize);
   if Assigned(Output) then
      try
         while feof(Output) = 0 do
         begin
            BytesRead := fread(Buffer, 1, BufferSize, Output);
            SetLength(TempString, length(TempString) + BytesRead);
            Move(Buffer^, TempString[length(TempString) - (BytesRead - 1)],   BytesRead);
            while Pos(#10, TempString) > 0 do
            begin
               Line := Copy(TempString, 1, Pos(#10, TempString) - 1);
               if CmdResult <> nil then CmdResult.Add(UTF8ToString(Line));
               TempString := Copy(TempString, Pos(#10, TempString) + 1,length(TempString));
            end;
         end;
      finally
         pclose(Output);
         wait(nil);
         FreeMem(Buffer, BufferSize);
      end;
end;

Geändert von softtouch (29. Aug 2022 um 20:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#2

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 30. Aug 2022, 10:42
In dem Codehaufen geht es hauptsächlich darum die Antwort/Ausgabe einer in der Konsole gestarteten Anwendung auszuwerten (https://stackoverflow.com/questions/...console-output). Kern für Dich ist der Einzeiler
Output := popen(PAnsiChar(ansistring(CmdLine)), 'r'); Da ist dann die Frage, ob Deine Rechte überhaupt ausreichen, chmod auszuführen. Eventuell wartet ja das System auf das Passwort oder so. Wie verhält sich denn Dein Mac, wenn Du den gewünschten Befehl von Hand eingibst?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#3

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 30. Aug 2022, 11:08
In dem Codehaufen geht es hauptsächlich darum die Antwort/Ausgabe einer in der Konsole gestarteten Anwendung auszuwerten (https://stackoverflow.com/questions/...console-output). Kern für Dich ist der Einzeiler
Output := popen(PAnsiChar(ansistring(CmdLine)), 'r'); Da ist dann die Frage, ob Deine Rechte überhaupt ausreichen, chmod auszuführen. Eventuell wartet ja das System auf das Passwort oder so. Wie verhält sich denn Dein Mac, wenn Du den gewünschten Befehl von Hand eingibst?

Sherlock
Manual im terminal eingegeben, klappt das einwandfrei.

Er hängt an dieser Zeile und ich weiss nicht warum. Wenn ich andere Befehle ausführen lasse, klappt es.

Move(Buffer^, TempString[length(TempString) - (BytesRead - 1)], BytesRead);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 30. Aug 2022, 11:23
Wenn die letzte Zeile nicht mit einem #10 aufhört, dann geht sie natürlich verloren.
Außer du vergisst nach der Schleife nicht den Rest im TempString,
also dort nochmal ein if TempString <> 'then CmdResult.Add(UTF8ToString(TempString)); .
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#5

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 31. Aug 2022, 08:46
Wenn die letzte Zeile nicht mit einem #10 aufhört, dann geht sie natürlich verloren.
Außer du vergisst nach der Schleife nicht den Rest im TempString,
also dort nochmal ein if TempString <> 'then CmdResult.Add(UTF8ToString(TempString)); .
Die Funktion kommt gar nicht bis zum Ende, die schmiert schon ab in der Zeile

Move(Buffer^, TempString[length(TempString) - (BytesRead - 1)], BytesRead);

Kennt denn niemand einen Funktionierenden Code um z.B. chmod oder auch youtube-dl oder ffmpeg zu starten und die Ausgabe abzufangen? Ich kriege noch graue Haare damit (wenn ich die nicht schon hätte).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 31. Aug 2022, 13:14
Und was für eine Fehlermeldung?

Zugriffsverleztzung bei Ardresse $00000**


Wenn BytesRead 0 ist und TempString noch leer war ... ja, dann muß es im Move knallen, eigentlich vor Move, weil es schon beim TempString[...] knallt
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#7

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 31. Aug 2022, 15:06
Und was für eine Fehlermeldung?

Zugriffsverleztzung bei Ardresse $00000**


Wenn BytesRead 0 ist und TempString noch leer war ... ja, dann muß es im Move knallen, eigentlich vor Move, weil es schon beim TempString[...] knallt
Leider, wie so häufig, kommt weder eine Fehlermeldung noch sonst was, das Programm hängt einfach auf dem Mac. Wenn ich es debugge, klappt alles bis zu dieser Zeile, wenn ich die dann ausführe, hängt alles.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 31. Aug 2022, 15:16
Wenn ich es debugge, klappt alles bis zu dieser Zeile, wenn ich die dann ausführe, hängt alles.
Und was steht in den betreffenden Variablen, wenn du im Debugger auf der Zeile stehst bevor sie ausgeführt wird?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#9

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 31. Aug 2022, 22:43
Wenn ich es debugge, klappt alles bis zu dieser Zeile, wenn ich die dann ausführe, hängt alles.
Und was steht in den betreffenden Variablen, wenn du im Debugger auf der Zeile stehst bevor sie ausgeführt wird?
Leider wird nichts angezeigt wenn ich mit der Maus drüber gehe. Das hat noch nie richtig geklappt wenn es um macOS ging.
Wie auch immer, ich hatte ja die Hoffnung das irgendwer einen Code irgendwo mal gesehen hat der genau das macht, was ich brauche. Scheint aber wohl doch nicht der Fall zu sein.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 31. Aug 2022, 22:49
Leider wird nichts angezeigt wenn ich mit der Maus drüber gehe. Das hat noch nie richtig geklappt wenn es um macOS ging.
Was ist mit der Anzeige in lokale Variablen?
Hast du es mit überwachten Ausdrücken versucht?
Klappt es auch nicht mit Strg-F7?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz