【问题标题】:How to get Artisan::call('command:name') output in a variable?如何在变量中获取 Artisan::call('command:name') 输出?
【发布时间】:2019-10-24 15:46:02
【问题描述】:

是否可以得到$output如下:

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

我在不同的帖子中尝试了许多解决方案,但在我的 Laravel 5.2 上不起作用。

【问题讨论】:

标签: laravel laravel-artisan


【解决方案1】:

您可以在 Artisan 上调用 output 方法

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

确保您在实际的 Artisan 命令中使用了可用的输出方法之一,例如 $this->line('output');。更多信息在docs

【讨论】:

  • 问题出在第一行自动回显输出,所以第二行没有用。
  • 如何在命令本身中生成此输出?你应该做类似$this->line('my output');
  • 噢……让我试试……谢谢你指出这一点@Bram Verstraten
  • $this-> 行有效。然后我使用了 Artisan::output()。谢谢你救了我! @布拉姆
  • 不用担心。请务必将此标记为已接受的答案,以便其他有相同问题的人更容易找到答案。
【解决方案2】:

有几种方法可以做到这一点,但由于您使用的是旧版本的 Laravel,因此最适合您的情况可能是当您最终迁移到新版本时不需要重写的方法。您是否尝试过普通的 PHP 方法 systemshell_execpassthru

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

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

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

附:如果您有任何想要将用户输入作为参数传递给工匠命令的用户输入,请确保先使用escapeshellcmd 对其进行转义。

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    相关资源
    最近更新 更多