1

我正在将旧的 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 构造函数期望二进制文件和参数作为数组传递(见这里)。

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

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

不会工作,因为>会被逃脱。

4

1 回答 1

1

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

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

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

于 2021-11-29T10:45:29.883 回答