Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v20 R7
LAUNCH EXTERNAL PROCESS

LAUNCH EXTERNAL PROCESS 


 

LAUNCH EXTERNAL PROCESS ( nomArchivo {; flujoEntrada {; flujoSalida {; flujoError}}}{; pid} ) 
Parámetro Tipo   Descripción
nomArchivo  Cadena in Ruta de acceso y argumentos del archivo a abrir
flujoEntrada  Cadena, BLOB in Flujo de entrada(stdin)
flujoSalida  Cadena, BLOB in Flujo de salida (stdout)
flujoError  Cadena, BLOB in Flujo de error(stderr)
pid  Entero largo in Identificador único del proceso externo

A partir de 4D v19 R4, recomendamos el uso de la clase SystemWorker para ejecutar y controlar los procesos externos. Sin embargo, se sigue soportando este comando.

El comando LAUNCH EXTERNAL PROCESS lanza un proceso externo de 4D, bajo macOS y Windows.
Bajo macOS, este comando ofrece acceso a todas las aplicaciones ejecutables que puedan ser iniciadas desde el Terminal.

Pase en el parámetro nomArchivo la ruta de acceso de la aplicación a ejecutar, como también los argumentos requeridos (si es necesario).

Bajo macOS, puede igualmente pasar únicamente el nombre de la aplicación a ejecutar; 4D utilizará entonces la variable del entorno PATH para ubicar el ejecutable.

Advertencia: este comando sólo puede iniciar aplicaciones ejecutables; no puede ejecutar instrucciones que hagan parte del shell (interprete de comandos). Por ejemplo, bajo Mac OS no es posible utilizar este comando para ejecutar la instrucción echo o las indirecciones.

El parámetro flujoEntrada (opcional) contiene el stdin del proceso externo. Una vez el comando haya sido ejecutado, los parámetro flujoSalida y flujoError (si se pasan) devuelven respectivamente el stdout y el tderr del proceso externo. Puede utilizar los parámetros de tipo BLOB en lugar de las cadenas de caracteres si maneja datos binarios (como imágenes).

4D ofrece tres variables de entorno específicas que se pueden configurar utilizando SET ENVIRONMENT VARIABLE y están disponibles para su uso en el contexto de LAUNCH EXTERNAL PROCESS:

  • _4D_OPTION_CURRENT_DIRECTORY: se utiliza para definir el directorio actual del proceso externo que se iniciará. En valorVar, debe pasar la ruta de acceso del directorio (sintaxis de tipo HFS en macOS y DOS en Windows). 
  • _4D_OPTION_HIDE_CONSOLE (Windows únicamente): permite ocultar la ventana de la consola DOS. Debe pasar "true" en valorVar para ocultar la consola o "false" para mostrarla.
  • _4D_OPTION_BLOCKING_EXTERNAL_PROCESS: permite ejecutar el proceso externo en modo asincrónico, en otras palabras, sin bloqueo para las otras aplicaciones. Debe pasar "false" en valorVar para definir una ejecución asincrónica o "true" para una ejecución sincrónica (por defecto). Para esta variable, pasar "" en valorVar no hace nada.
    Si define la variable del entorno _4D_OPTION_BLOCKING_EXTERNAL_PROCESS como "false" vía el comando SET ENVIRONMENT VARIABLE (ejecución asincrónica), los parámetros flujoSalida y flujoError no se devuelven.

Estas variables son válidas en el proceso actual para la siguiente llamada a LAUNCH EXTERNAL PROCESS.

Cuando se pasa, el parámetro pid (entero largo) devuelve el ID único del proceso creado para lanzar el comando, independientemente del estado de la opción _4D_OPTION_BLOCKING_EXTERNAL_PROCESS. Con esta información, es más fácil interactuar con los procesos externos creados por el comando, por ejemplo. para detenerlo. Si el lanzamiento del proceso falla, no se devuelve el parámetro pid.

Los siguientes ejemplos utilizan el Terminal macOS disponible en la carpeta Aplicaciones/Utilidades.

1. Para cambiar los permisos de un archivo (chmod es el comando macOS utilizado para modificar el acceso al archivo):

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

2. Para editar un archivo de tipo texto (cat es el comando macOS utilizado para editar los archivos). En este ejemplo, se pasa la ruta de acceso completa del comando:

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

3. Para obtener los contenidos de la carpeta "Users" (ls -l es el equivalente macOS del comando dir en DOS):

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

4. Para iniciar una aplicación "gráfica" independiente, es preferible utilizar el comando sistema open (en este caso, la instrucción LAUNCH EXTERNAL PROCESS tiene el mismo efecto que hacer doble clic en la aplicación):

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

 

5. Para abrir NotePad:

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

6. Para abrir Notepad y abrir un documento específico:

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

7. Para iniciar la aplicación Microsoft® Word® y abrir un documento específico (Note el uso de las dos ""):

 $midoc:="C:\\Program Files\\Microsoft Office\\Office10\\WINWORD.EXE \"C:\\Documents and
 Settings\\Macros\\Escritorio\\MisDocs\\Nuevacarpeta\\test.xml\""
 LAUNCH EXTERNAL PROCESS($midoc;$tIn;$tOut)

8. Para ejecutar un script Perl (es necesario ActivePerl):

 C_TEXT($entrada;$salida)
 SET ENVIRONMENT VARIABLE("mivariable";"valor")
 LAUNCH EXTERNAL PROCESS("D:\\Perl\\bin\\perl.exe D:\\Perl\\eg\\cgi\\env.pl";$entrada;$salida)

9. Para iniciar un comando con el directorio actual y sin mostrar la consola:

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

10. Para permitir al usuario abrir un documento externo en Windows:

 $nomdoc:=Select document("";"*.*";"Elija el archivo a abrir";0)
 If(OK=1)
    SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")
    LAUNCH EXTERNAL PROCESS("cmd.exe /C start \"\" \""+document+"\"")
 End if
 

11. Los siguientes ejemplos recuperan la lista de procesos bajo Windows:

 C_LONGINT($pid)
 C_TEXT($stdin;$stdout;$stderr)
 
 LAUNCH EXTERNAL PROCESS("tasklist";$pid//gets PID only
 LAUNCH EXTERNAL PROCESS("tasklist";$stdin;$stdout;$stderr;$pid//obtener toda la información

Si el comando ha sido ejecutado correctamente, la variable sistema OK toma el valor 1. De lo contrario (archivo no encontrado, memoria insuficiente, etc.), toma el valor 0.



Ver también 

OPEN URL
SET ENVIRONMENT VARIABLE

 
PROPIEDADES 

Producto: 4D
Tema: Herramientas
Número 811

Este comando modifica la variable sistema OKThis command can be run in preemptive processes

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

Creado por: 4D 2004
Modificado: 4D v15 R4

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v20 R7)