logo

mercoledì 20 ottobre 2010

dare un comando al pulsante

EXEC
[ Processo = ] EXEC Comando [ WAIT ] [ FOR { { READ | INPUT } | 
{ WRITE | OUTPUT } } ] [ AS Nome ]

EXEC Comando TO Variabile
Esegue un comando. Per gestire il comando viene creato un oggetto Process interno.
Il comando deve essere specificato come un array di stringhe contenente almeno un elemento. Il primo elemento di questo array è il nome del comando, gli altri sono parametri opzionali.

  • Se WAIT è specificato, allora l'interprete attende la fine del comando. Altrimenti, il comando viene eseguito in background.
  • Se FOR è specificato, allora l'input-output del comando viene rediretto cosicché il tuo programma possa intercettarli:
    • Se WRITE è specificato, puoi mandare dati allo standard input del comando usando l'oggetto Process con istruzioni d'output comuni: PRINT, WRITE, ... . Nota che necessiti di un riferimento all'oggetto Process per questo.
    • Se READ è specificato, allora verranno generati eventi ogni volta che il comando manda dati al suo stream standard output: l'evento Read viene sollevato quando vengono mandati dati allo stream standard output, e l'evento Error viene sollevato quando vengono mandati dati allo stream standard error. Usa l'oggetto Process con Funzioni di Stream e Input/Output per leggere lo standard output del processo.
Se utilizzi le parole chiave INPUT e OUTPUT invece di READ e WRITE, allora il processo viene eseguito in un terminale virtuale. Questo significa che il processo penserà di essere eseguito dentro un vero terminale. Nome è il nome dell'evento usato dall'oggetto Process. Per default, è "Process".
Puoi avere un riferimento all'oggetto Process interno creato usando un assegnamento.
Se usi la seconda forma, il comando viene eseguito, l'interprete attende la sua fine, e l'output completo del comando viene messo nella stringa specificata.

Esempio

' Ottieni il contenuto della directory
EXEC [ "ls", "-la", "/tmp" ] WAIT

' Metti il contenuto della directory nella stringa
DIM sOutput AS String
EXEC [ "ls", "-la", "/tmp" ] TO sOutput

' Metti il contenuto della directory nella stringa, ma in background

DIM sOutput AS String

' Viene usato un nome di evento specifico
EXEC [ "ls", "-la", "/tmp" ] FOR READ AS "Contenuto"

...

PUBLIC SUB Contenuto_Read()

  DIM sLinea AS String

  READ #LAST, sLinea, -256

  sOutput &= sLinea

END

PUBLIC SUB Contenuto_Kill()

  PRINT sOutput

END

Se vuoi sapere quanti bytes puoi leggere in un gestore di eventi Process_Read, usa la funzione Lof.

Dato che gli argomenti vengono mandati direttamente al processo, non hai bisogno di racchiuderli tra virgolette, come dovresti fare in una shell.
' perl -e 'print while <>;' diventa

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

Nessun commento:

Posta un commento