无法使用 Symfony 进程运行带有参数的 Laravel Artisan 命令 [重复]

Posted

技术标签:

【中文标题】无法使用 Symfony 进程运行带有参数的 Laravel Artisan 命令 [重复]【英文标题】:Unable to run a Laravel Artisan command with parameters using Symfony process [duplicate] 【发布时间】:2022-01-23 20:41:20 【问题描述】:

我正在尝试在我的共享托管服务器上的 Laravel 应用程序中使用 Symfony 启动一个进程,该进程将调用具有如下参数的 Artisan 命令:

$process = new Process(['/usr/local/bin/php', base_path('artisan'), 'queue:work --stop-when-empty']);
$process->setTimeout(null);
$process->start();

这不起作用:

ERROR: Command "queue:work --stop-when-empty" is not defined.

Did you mean one of these?
    queue:batches-table
    queue:clear
    queue:failed
    queue:failed-table
    queue:flush
    queue:forget
    queue:listen
    queue:monitor
    queue:prune-batches
    queue:prune-failed
    queue:restart
    queue:retry
    queue:retry-batch
    queue:table
    queue:work "exception":"[object] (Symfony\\Component\\Console\\Exception\\CommandNotFoundException(code: 0): Command \"queue:work --stop-when-empty\" is not defined.

问题出在参数--stop-when-empty 上,因为命令在没有它的情况下成功运行。如何将此参数传递给命令?

【问题讨论】:

【参考方案1】:

该过程在您传入的每个数组值周围添加引号。现在,它正在尝试运行

"exec '/usr/local/bin/php' '/your/path/to/artisan' 'queue:work --stop-when-empty'"

因此,通过在整个字符串周围添加引号,它将'queue:work --stop-when-empty' 视为单个命令,而不是命令和选项。将命令分开,以便正确引用它

$process = new Process(['/usr/local/bin/php', base_path('artisan'), 'queue:work', '--stop-when-empty']);

【讨论】:

以上是关于无法使用 Symfony 进程运行带有参数的 Laravel Artisan 命令 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 进程组件 - 为命令设置输入参数

Symfony 5 - 带有 TextType 的自定义 ChoiceType

带有参数的 symfony 路由上的 css/js 路径错误

Symfony - 在控制器中生成带有参数的 url

Python:子进程并运行带有多个参数的bash脚本

在Symfony单元测试期间无法获取用户名