【发布时间】:2019-10-24 15:46:02
【问题描述】:
是否可以得到$output如下:
$output = Artisan::call('command:name');
我在不同的帖子中尝试了许多解决方案,但在我的 Laravel 5.2 上不起作用。
【问题讨论】:
-
你真的应该考虑更新你的 laravel
是否可以得到$output如下:
$output = Artisan::call('command:name');
我在不同的帖子中尝试了许多解决方案,但在我的 Laravel 5.2 上不起作用。
【问题讨论】:
您可以在 Artisan 上调用 output 方法
Artisan::call('command:name');
$output = Artisan::output();
确保您在实际的 Artisan 命令中使用了可用的输出方法之一,例如 $this->line('output');。更多信息在docs。
【讨论】:
$this->line('my output');
有几种方法可以做到这一点,但由于您使用的是旧版本的 Laravel,因此最适合您的情况可能是当您最终迁移到新版本时不需要重写的方法。您是否尝试过普通的 PHP 方法 system、shell_exec 和 passthru?
system 将在成功时仅返回命令的最后一行,在失败时返回 FALSEshell_exec 将返回整个输出,但无法获取输出状态代码passthru 不会返回任何输出,而是会在stdout 上全部输出。虽然可以使用输出缓存方法(即ob_start 和ob_get_contents)将其放入变量中在任何情况下,您都应该使用您希望运行的命令的 CLI 版本作为参数来调用这些方法:
$output = shell_exec("php artisan command:here");
附:如果您有任何想要将用户输入作为参数传递给工匠命令的用户输入,请确保先使用escapeshellcmd 对其进行转义。
【讨论】: