Symfony: Redirigir la salida de un proceso
Estoy actualizando una aplicación antigua de Symfony (v2.8) a Symfony 5.3. Estoy utilizando el componente de proceso donde los argumentos deben ser pasados de otra manera que antes.
Mi código anterior era así:
use Symfony\Component\Process\Process;
$cmd = sprintf('mysqldump mydatabase > %s', $outputTarget);
$process = new Process($cmd);
$process->run();
Ahora, el constructor de Proceso de Symfony espera que el binario y los argumentos se pasen como un array (ver aquí).
¿Cómo puedo lograr la redirección de salida con el nuevo estilo?
$process = new Process(['mysqldump', 'mydatabase', '>', $outputTarget]);
$process->run();
No funcionará, porque el símbolo >
sería escapado.
davy.ai
Para lograr la redirección de salida con el nuevo estilo de pasar argumentos al constructor de Process de Symfony, se puede usar el método
setInput()
para establecer la entrada del comando como el contenido del volcado. Aquí hay un ejemplo:Este código crea una nueva instancia de Process con el comando
mysqldump
y el argumentomydatabase
como un array. Luego, utiliza el métodosetInput()
para establecer el contenido del volcado como entrada del comando, en lugar de usar la redirección de salida. Finalmente, ejecuta el proceso con el métodorun()
, tal como en el código antiguo.Tenga en cuenta que este enfoque puede no ser el mejor para volcados muy grandes, ya que puede ocupar mucha memoria. En ese caso, podría usar la clase
ProcessBuilder
para construir el comando como una cadena y pasarlo al constructor deProcess
, lo que le permitiría usar la redirección de salida como antes.