如何在变量中获取 Artisan::call('command:name') 输出?

How to get Artisan::call('command:name') output in a variable?

是否可以得到$输出如下:

$output = Artisan::call('command:name');

我在不同的帖子中尝试了很多解决方案,但在我的 Laravel 5.2 上没有用。

您可以在 Artisan

上调用 output 方法
Artisan::call('command:name');
$output = Artisan::output();

确保您在实际的 Artisan 命令中使用一种可用的输出方法,例如 $this->line('output');docs.

中的更多信息

有几种方法可以实现这一点,但由于您使用的是 Laravel 的旧版本,可能最适合您的情况是在您最终迁移到较新版本时不需要重写的方法。您是否尝试过香草 PHP 方法 systemshell_execpassthru

  • system 将 return 成功时只是命令的最后一行,失败时为 FALSE
  • shell_exec 将 return 整个输出但无法获取输出状态代码
  • passthru 不会 return 任何输出,而是会在 stdout 上全部输出。尽管可以使用输出缓存方法(即 ob_startob_get_contents)将其放入变量中

在任何情况下,您都应该使用您希望使用的命令的 CLI 版本作为参数来调用这些方法 运行:

$output = shell_exec("php artisan command:here");

P.S。如果您有任何机会希望将用户输入作为参数传递给 artisan 命令,请确保先使用 escapeshellcmd 将其转义。