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:重定向进程的输出的主要内容,如果未能解决你的问题,请参考以下文章

重定向子进程标准输出

Windows:具有重定向输入和输出的子进程

注销后如何停止 Symfony 重定向

带有响应的 Symfony 重定向

重定向进程输出[关闭]

在C中重定向子进程的文件输出