【问题标题】:Symfony: Redirect output of a ProcessSymfony:重定向进程的输出
【发布时间】: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();

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

【问题讨论】:

    标签: php symfony symfony5 symfony-process


    【解决方案1】:

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

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

    通过这种方式,参数作为环境变量传递给进程,并且操作系统(或外壳?)负责将命令的占位符替换为 env。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      相关资源
      最近更新 更多