Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Mit Delphi Chmod oder andere cmd's ausführen unter macOS (https://www.delphipraxis.net/211319-mit-delphi-chmod-oder-andere-cmds-ausfuehren-unter-macos.html)

softtouch 29. Aug 2022 16:48


Mit Delphi Chmod oder andere cmd's ausführen unter macOS
 
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;

Sherlock 30. Aug 2022 09:42

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
 
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
Delphi-Quellcode:
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

softtouch 30. Aug 2022 10:08

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

Zitat von Sherlock (Beitrag 1511000)
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
Delphi-Quellcode:
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.

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

himitsu 30. Aug 2022 10:23

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
 
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
Delphi-Quellcode:
if TempString <> '' then CmdResult.Add(UTF8ToString(TempString));
.

softtouch 31. Aug 2022 07:46

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

Zitat von himitsu (Beitrag 1511005)
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
Delphi-Quellcode:
if TempString <> '' then CmdResult.Add(UTF8ToString(TempString));
.

Die Funktion kommt gar nicht bis zum Ende, die schmiert schon ab in der Zeile

Delphi-Quellcode:
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).

himitsu 31. Aug 2022 12:14

AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
 
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 :angle2:

softtouch 31. Aug 2022 14:06

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

Zitat von himitsu (Beitrag 1511046)
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 :angle2:

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.

Uwe Raabe 31. Aug 2022 14:16

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

Zitat von softtouch (Beitrag 1511054)
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?

softtouch 31. Aug 2022 21:43

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

Zitat von Uwe Raabe (Beitrag 1511055)
Zitat:

Zitat von softtouch (Beitrag 1511054)
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.

Uwe Raabe 31. Aug 2022 21:49

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

Zitat von softtouch (Beitrag 1511068)
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.
Seite 1 von 2  1 2      

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