Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v20 R7
LAUNCH EXTERNAL PROCESS

LAUNCH EXTERNAL PROCESS 


 

LAUNCH EXTERNAL PROCESS ( DateiName {; EingStream {; AusgStream {; FehlerStream}}}{; pid} ) 
Parameter Typ   Beschreibung
DateiName  String in Pfad und Argumente der zu startenden Datei
EingStream  String, BLOB in Eingabe-Stream (stdin)
AusgStream  String, BLOB in Ausgabe-Stream (stdout)
FehlerStream  String, BLOB in Fehler-Stream (stderr)
pid  Lange Ganzzahl in Einmalige ID für externen Prozess

Ab 4D v19 R4 empfehlen wir die Verwendung der Klasse SystemWorker zur Ausführung und Steuerung externer Prozesse. Dieser Befehl wird jedoch weiterhin unterstützt. 

Der Befehl LAUNCH EXTERNAL PROCESS startet unter Windows und macOS einen externen Prozess von 4D. Auf macOS gewährt dieser Befehl Zugriff auf jedes ausführbare Programm, das sich über das Terminal starten lässt.

In DateiName übergeben Sie den festen Dateipfad des auszuführenden Programms, sowie bei Bedarf die erforderlichen Argumente.
Auf macOS können Sie auch nur den Namen des Programms übergeben. 4D findet dann über die Umgebungsvariable PATH das ausführbare Programm.

Warnung: Dieser Befehl kann nur ausführbare Programme starten; er kann keine Anweisungen ausführen, die Teil der "Shell" (Befehls-Interpreter) sind. Auf macOS ist es z.B. nicht möglich, mit diesem Befehl die Anweisung Echo oder Indirektionen auszuführen.

EingStream (optional) enthält den stdin des externen Prozesses. Nach Ausführung des Befehls enthalten die Variablen AusgStream und FehlerStream – sofern übergeben – stdout und stderr des externen Prozesses. Sie können statt Parameter vom Typ String auch BLOB verwenden, wenn Sie Text größer als 32 KB oder binäre Daten, z.B. Bilder verwenden.

4D bietet drei spezifische Umgebungsvariablen, die sich mit dem Befehl SET ENVIRONMENT VARIABLE setzen und im Kontext von LAUNCH EXTERNAL PROCESS verwenden lassen:

  • _4D_OPTION_CURRENT_DIRECTORY setzt das aktuelle Verzeichnis des zu startenden externen Prozesses. In varWert müssen Sie den Pfadnamen des Verzeichnisses übergeben (HFS Typ Syntax auf macOS und DOS unter Windows). 
  • _4D_OPTION_HIDE_CONSOLE (nur Windows) blendet das Fenster der DOS Konsole aus. Übergeben Sie in varWert "true", um die Konsole auszublenden, "false", um sie anzuzeigen.
  • _4D_OPTION_BLOCKING_EXTERNAL_PROCESS führt einen externen Prozess im asynchronen Modus aus, d.h. er ist nicht für andere Anwendungen blockiert. Für die asynchrone Ausführung müssen Sie in varWert "false" übergeben, für die synchrone Ausführung "true" (Für diese Variable ist kein Standardwert möglich).
    Diese Variablen gelten im aktuellen Prozess für den nächsten Aufruf von LAUNCH EXTERNAL PROCESS.
    Setzen Sie _4D_OPTION_BLOCKING_EXTERNAL_PROCESS über den Befehl SET ENVIRONMENT VARIABLE auf falsch (asynchrone Ausführung), gibt sie in den Parametern AusgStream und FehlerStream keinen Wert zurück.

Diese Variablen sind im aktuellen Prozess für den nächsten Aufruf von LAUNCH EXTERNAL PROCESS gültig.

Der Parameter pid gibt für den erstellten Prozess die ID auf Systemebene zurück, um den Befehl unabhängig vom Status der Option  _4D_OPTION_BLOCKING_EXTERNAL_PROCESS zu starten. Diese Angabe erleichtert die Interaktion mit einem erstellten externen Prozess, z.B. um ihn zu stoppen. Schlägt Starten des Prozesses fehl, wird in pid kein Wert zurückgegeben.

Die folgenden Beispiele verwenden das macOS Terminal aus dem Ordner Applications/Utilities.

1. Den Zugriff für eine Datei ändern (chmod ist die macOS Funktion zum Ändern des Dateizugriffs):

 LAUNCH EXTERNAL PROCESS("chmod +x /folder/myfile.txt")

2. Eine Textdatei bearbeiten (cat ist die macOS Datei zum Bearbeiten von Dateien). Hier wird der komplette Zugriffspfad des Befehls übergeben:

 C_TEXT(input;output)
 input:=""
 LAUNCH EXTERNAL PROCESS("/bin/cat /folder/myfile.txt";input;output)

3. Den Inhalt eines Ordners anzeigen (ls -l is ist die Entsprechung unter UNIX für die Funktion dir in DOS):

 C_TEXT($In;$Out)
 LAUNCH EXTERNAL PROCESS("/bin/ls -l /Users";$In;$Out)

4. Um eine unabhängige "grafische" Anwendung zu starten, verwenden Sie besser den Systembefehl Öffnen. (In diesem Fall hat die Anweisung LAUNCH EXTERNAL PROCESS dieselbe Wirkung wie Doppelklick auf die Anwendung): 

 LAUNCH EXTERNAL PROCESS("open /Applications/Calculator.app")

5. NotePad öffnen:

 LAUNCH EXTERNAL PROCESS("C:\\WINDOWS\\notepad.exe")

6. Notepad und spezifisches Dokument öffnen:

 LAUNCH EXTERNAL PROCESS("C:\\WINDOWS\\notepad.exe C:\\Docs\\new folder\\res.txt")

7. Microsoft® Word® Anwendung und ein bestimmtes Dokument öffnen (beachten Sie die Verwendung von zwei ""):

 $mydoc:="C:\\Program Files\\Microsoft Office\\Office10\\WINWORD.EXE \"C:\\
 Documents and Settings\\Mark\\Desktop\\MyDocs\\New folder\\test.xml\""
 LAUNCH EXTERNAL PROCESS($mydoc;$tIn;$tOut)

8. Ein Perl Skript ausführen (benötigt ActivePerl):

 C_TEXT($input;$output)
 SET ENVIRONMENT VARIABLE("myvariable";"value")
 LAUNCH EXTERNAL PROCESS("D:\\Perl\\bin\\perl.exe D:\\Perl\\eg\\cgi\\env.pl";$input;$output)

9. Einen Befehl in einem spezifischen Verzeichnis und ohne Anzeigen der Konsole starten:

 SET ENVIRONMENT VARIABLE("_4D_OPTION_CURRENT_DIRECTORY";"C:\\4D_VCS")
 SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")
 LAUNCH EXTERNAL PROCESS("meinBefehl")

10. Dem Benutzer ermöglichen, ein externes Dokument unter Windows zu öffnen:

 $docname:=Select document("";"*.*";"Wähle Datei zum Öffnen";0)
 If(OK=1)
    SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")
    LAUNCH EXTERNAL PROCESS("cmd.exe /C start \"\" \""+document+"\"")
 End if

11. Die Prozessliste unter Windows anfordern:

 C_LONGINT($pid)
 C_TEXT($stdin;$stdout;$stderr)
 
 LAUNCH EXTERNAL PROCESS("tasklist";$pid//erhält nur PID
 LAUNCH EXTERNAL PROCESS("tasklist";$stdin;$stdout;$stderr;$pid//erhält alle Angaben

Wurde der Befehl korrekt ausgeführt, wird die Systemvariable OK auf 1 gesetzt. Tritt ein Fehler auf, wie z.B. Datei nicht gefunden, Speicher reicht nicht aus, wird sie auf 0 (Null) gesetzt.



Siehe auch 

OPEN URL
SET ENVIRONMENT VARIABLE

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Werkzeuge
Nummer: 811

Dieser Befehl ändert die Systemvariable OKDieser Befehl kann in preemptive Prozessen laufen

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt: 4D 2004
Geändert: 4D v15 R4

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)