使用进程和控制台应用程序有什么区别?
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 控制台命令,我建议使用控制台组件来避免操作系统开销,它允许你传递任何你需要的参数并获得输出.如果您需要 运行 外部命令,流程组件将是正确的选择。
运行 以编程方式使用 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 控制台命令,我建议使用控制台组件来避免操作系统开销,它允许你传递任何你需要的参数并获得输出.如果您需要 运行 外部命令,流程组件将是正确的选择。