Symfony:重定向进程的输出

nai*_*rch 4 php symfony symfony-process symfony5

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

我以前的代码就像

use Symfony\Component\Process\Process;

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

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

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

$process = new Process(['mysqldump', 'mydatabase', '>', $outputTarget]);
$process->run();
Run Code Online (Sandbox Code Playgroud)

不会起作用,因为>会被转义。

nai*_*rch 7

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

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

这样,参数就会作为环境变量传递给进程,操作系统(或 shell?)会负责用 env 替换命令的占位符。