Symfony:重定向进程的输出
Posted
技术标签:
【中文标题】Symfony:重定向进程的输出【英文标题】:Symfony: Redirect output of a Process 【发布时间】:2022-01-06 04:21:42 【问题描述】:我正在将旧的 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();
不起作用,因为 >
会被转义。
【问题讨论】:
【参考方案1】:我找到了解决方法。 Process::fromShellCommandline
可用于重定向输出。这是我的解决方案:
$process = Process::fromShellCommandline('mysqldump mydatabase > "$OUTPUT_TARGET"');
$process->start(null, [
'OUTPUT_TARGET' => $outputTarget,
]);
通过这种方式,参数作为环境变量传递给进程,并且操作系统(或外壳?)负责将命令的占位符替换为 env。
【讨论】:
以上是关于Symfony:重定向进程的输出的主要内容,如果未能解决你的问题,请参考以下文章