EXEC

[ Proceso = ] EXEC Comando [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } }
EXEC Comando TO Variable

Ejecuta un comando. Para gestionarlo, se crea un objeto Process internamente.

El comando se ha de especificar como una matriz de cadenas que contiene al menos un elemento. El primer elemento de dicha matriz es el nombre del comando, y el resto son parámetros opcionales.

  • Si se especifica WAIT , el intérprete espera a la finalización del comando. En caso contrario, el comando se ejecutará en segundo plano.

  • Si se especifica FOR , la entrada y salida del comando se redirigen de modo que el programa pueda interceptarlas.

    • Si se especifica WRITE , podrá escribir datos a la entrada estándar del comando empleando el objeto Process con las funciones de escritura habituales: PRINT, WRITE, ... Tenga en cuenta que ha de disponer de una referencia al objeto Process ello.

    • Si se especifica READ , se dispararán eventos cada vez que el comando envíe datos por su salida estándar: el evento Read se dispara si se envían datos por la salida estándar, y el evento Error se dispara cuando hay datos en la salida estándar de errores. Emplee el objeto Process con Flujos y funciones de Entrada/Salida para leer los datos de su salida:.

Si emplea las palabras clave INPUT y OUTPUT en lugar de READ y WRITE, el proceso se ejecutará dentro de un terminal virtual. Esto significará que el proceso creera encontrarse dentro de un terminal real.

Para obtener una referencia al objeto Process interno, utilice la asignación.

Si hace uso de la segunda sintaxis, el comando se ejecuta, el intérprete espera a que finalice, y toda la salida del programa es devuelta en la cadena que se indique.

Examples

' Obtener el contenido de una carpeta

EXEC [ "ls", "-la", "/tmp" ] WAIT

' Lo mismo, pero en segundo plano

DIM Content AS String

EXEC [ "ls", "-la", "/tmp" ] FOR READ

...

PUBLIC SUB Process_Read()

  DIM sLine AS String

  LINE INPUT #LAST, sLine

  Content = Content & sLine
  PRINT sLine

END

Para conocer cuantos bytes puede leer en un evento Process_Read, emplee la función Lof.

Dado que los argumentos se envían directamente al proceso, no es necesario que utilice caracteres especiales como comillas simples o dobles, del modo en que lo haría en una shell:

Examples

' perl -e 'print while <>;' se convierte en:

EXEC [ "perl", "-e", "print while <>;" ] FOR READ WRITE

Véase también