Symfony:重定向进程的输出

Symfony: Redirect output of a Process

我正在将旧的 Symfony 应用程序 (v2.8) 升级到 Symfony 5.3。我正在使用必须以不同于以前的方式传递参数的流程组件。

我之前的代码是这样的

use Symfony\Component\Process\Process;

$cmd = sprintf('mysqldump mydatabase > %s', $outputTarget);
$process = new Process($cmd);
$process->run();

现在,Symfony 的 Process 构造函数期望将二进制文件和参数作为数组传递 (see here)。

如何实现新样式的输出重定向?

$process = new Process(['mysqldump', 'mydatabase', '>', $outputTarget]);
$process->run();

不会工作,因为 > 会被转义。

我找到了解决方法。 Process::fromShellCommandline 可用于重定向输出。这是我的解决方案:

$process = Process::fromShellCommandline('mysqldump mydatabase > "$OUTPUT_TARGET"');
$process->start(null, [
    'OUTPUT_TARGET' => $outputTarget,
]);

通过这种方式,参数作为环境变量传递给进程,OS(或 shell?)负责用 env 替换命令的占位符。