使用流程和控制台应用程序有什么区别?

问题描述

使用以下方法以编程方式运行 Symfony 控制台命令有什么区别:

1-

$command = $this->console.'swiftmailer:spool:send > output.log 2> out.log &';
$process = new \Symfony\Component\Process($command);
$process->run();

2-

$application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel);
$application->setAutoExit(false);
        
$payload = ['command' => 'swiftmailer:spool:send'];

$input = new \Symfony\Component\Console\Input\ArrayInput($payload);

$output = new \Symfony\Component\Console\Output\BufferedOutput();
$application->run($input,$output);

我知道在处理结果方面有所不同,但除此之外还有其他技术差异吗?

解决方法

The Process Component 在后台使用 proc_open function,使用您的操作系统,以便打开用于输入/输出的文件指针,并使用 proc_close 关闭进程并返回退出进程代码。

虽然 The Console Component 在不与操作系统交互的情况下执行您的控制台命令,但在您的应用程序中以编程方式执行它。基本上,它会调用您的命令的 execute 函数。

如果您想运行 Symfony 控制台命令,我建议您使用控制台组件来避免操作系统开销,它允许您传递所需的任何参数并获得输出。如果您需要运行外部命令,进程组件将是正确的选择。