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 替换命令的占位符。
我正在将旧的 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 替换命令的占位符。