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