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

What is the difference between using a Process and Console Application?

运行 以编程方式使用 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 is using the proc_open function under the hood, using your operating system, in order to open file pointers for input/output and the proc_close 关闭进程和 return 进程的退出代码。

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

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