Pregunta

Estoy aprendiendo a escribir guiones (TCL) y yo esperaría notar que algunos ejemplos muestran el uso desove, mientras que otros muestran el ejecutivo de comandos. He intentado googlear, pero no puede encontrar cuál es la diferencia?

Supongamos que yo llamo 'exec' en un medio de un guión largo esperar, ¿qué puedo esperar que suceda?

¿Fue útil?

Solución

spawn no es un comando expect un comando tcl. exec es un comando tcl.

spawn crea un proceso. entrada y salida Los procesos están conectados a esperar para su uso por el otro esperan comandos:. send, expect y interact

exec crea un subproceso bajo TCL. En general, el TCL se suspende hasta que el subproceso completa. Sin embargo, un puede crear el subproceso en segundo plano (usando y como último argumento) y si uno se conecta la entrada y la salida correcta, TCL puede interactuar con el subproceso. Esto es muy torpe y es exactamente el tipo de interacción que se esperaba era diseñado para manejar sin problemas.

Otros consejos

Una forma más sencilla de responder a la pregunta está reformulando a preguntar cuándo se debe utilizar exec vs desove. En resumen, utilizar desove para los comandos interactivos y ejecutivo para los comandos no interactivos.

Es también digno de mención que algunos programas (muchos?) Se comportan de manera diferente cuando se ejecuta por un usuario (es decir, en la línea de comandos) vs formar parte de un proceso por lotes / run de otro proceso. La diferencia real es si hay un terminal conectado al proceso.

El comando desove, parte de la extensión Esperar a Tcl, prepara las cosas por lo que el programa ejecutado se ve como correr por un usuario, y luego añade la funcionalidad para permitir que el programa de TCL para interactuar con el programa externo de una manera conveniente ( es decir, haciendo coincidir su salida a través de expresiones regulares y se ramifican los partidos). Las cosas funcionan a través de desove se ejecutan de forma asíncrona.

El comando exec es un comando Tcl núcleo que corre el otro programa, volviendo su salida. No realice ninguna de las complicadas configuraciones que desovan hace, pero puede ser muy útil para simplemente ejecutar un programa y ver su salida (y es código de retorno). Cosas a cargo de ejecutivo son, por defecto, se ejecutan de forma sincrónica, pero un símbolo de unión al final del comando hace que se ejecute en segundo plano (como secuencias de comandos shell tradicional).

El comando de apertura, mientras que generalmente se utiliza para leer / escribir archivos, también se puede utilizar para ejecutar procesos externos. Precediendo el nombre del comando con la tubería (|) símbolo, le dice que se ejecute un proceso externo, y tener acceso a lectura / escritura descriptores de fichero para interactuar con el proceso resultante. Esta es una especie de término medio entre el ejecutivo y desovar, con mucha más interacción con el proceso disponible, pero sin la configuración del entorno complicado que desovan hace. Puede ser muy útil para interactuar con programas que requieren de entrada, pero son todavía bastante bien configuración para la automatización.

Por lo que yo sé, engendro devuelve un identificador de proceso (y enlaces en la Esperar), mientras ejecutivo sólo devuelve la salida estándar final, a menos que pase "&". Por lo que no afectará a sus Espera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top