Introducción
El facadeProcess de Laravel es un envoltorio ligero sobre el componente Process de Symfony.
Ofrece una API concisa para ejecutar comandos de shell desde tu aplicación Laravel y tratar el resultado.
Arrancar un proceso
ConProcess::run() ejecutas un comando de forma síncrona y obtienes el resultado.
ProcessResult expone métodos para inspeccionar el resultado.
Lanzar una excepción si falla
Para lanzarIlluminate\Process\Exceptions\ProcessFailedException cuando el código sea superior a 0, utiliza throw() o throwIf().
Opciones del proceso
Directorio de trabajo
Indica el directorio conpath(). Si lo omites, se utiliza el directorio actual del script PHP.
Entrada estándar
Coninput() pasas datos por la entrada estándar del proceso.
Timeout
Por defecto son 60 segundos. Cámbialo contimeout(). Si expira, el proceso se aborta y se lanza ProcessTimedOutException.
CarbonInterval.
forever().
Variables de entorno
Conenv() añades o sobrescribes variables de entorno. Las del sistema se heredan automáticamente.
false.
Desactivar la salida
Si no vas a usar salidas voluminosas,quietly() reduce el consumo de memoria.
Salida en tiempo real
Pasando una closure como segundo argumento derun(), recibes la salida en streaming.
Pipelines
ConProcess::pipe() la salida de un comando alimenta la entrada del siguiente.
as() a cada proceso, la closure de salida puede identificar de cuál proviene la salida.
Procesos asíncronos
ConProcess::start() arrancas un proceso en segundo plano. Tu aplicación puede seguir con otras tareas mientras se ejecuta.
PID y señales
Conid() obtienes el PID del proceso.
signal() envías una señal al proceso.
Salida de un proceso asíncrono
Durante la ejecución,latestOutput() y latestErrorOutput() devuelven la salida generada desde la última llamada.
waitUntil().
Comprobar timeouts en asíncrono
Llamar aensureNotTimedOut() dentro del bucle lanza una excepción si el proceso ha excedido el timeout.
Procesos concurrentes
ConProcess::pool() ejecutas varios procesos en paralelo.
concurrently() arrancas el pool y esperas los resultados en una sola línea.
Asignar nombres a los procesos
Conas() asignas una clave a cada proceso para acceder cómodamente al resultado.
Pruebas
Fake de procesos
ConProcess::fake() puedes escribir tests sin ejecutar comandos reales.
Fake de comandos concretos
Con comodines o cadenas exactas como clave, puedes definir fakes distintos.Fakes en secuencia
Cuando se invoca varias veces el mismo comando, puedes definir el orden de las respuestas.Aserciones
| Método | Descripción |
|---|---|
Process::assertRan('command') | Verifica que se ejecutó el comando |
Process::assertNotRan('command') | Verifica que no se ejecutó |
Process::assertRan(fn) | Validación detallada con closure |
Process::assertRanTimes('command', 3) | Se ejecutó el número indicado de veces |
Prevenir procesos no simulados
Al llamar aProcess::preventStrayProcesses(), si se ejecuta un comando sin fake definido se lanza una excepción.
Páginas relacionadas
Consola Artisan
Crea comandos personalizados que invoquen procesos.
Colas
Compáralo con el procesamiento asíncrono.