如何将命令行传递给 Symfony Process 组件

问题描述 投票:0回答:1

我尝试根据 Symfony 文档将以下命令行传递给 Symfony Process 组件:

use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;

$process = new Process(['cat crons/* | crontab -']);
$process->run();

还有以下内容:

$process = new Process(['cat crons/*', '|', 'crontab -']);

和:

['cat crons/*', '|', 'crontab', '-']

但是它不起作用,它出现了异常:

 The command "'cat /var/www/config/crontab/* | crontab -'" failed.       
                                                                          
  Exit Code: 127(Command not found)                                       
                                                                          
  Working directory: /var/www                                             
                                                                          
  Output:                                                                 
  ================                                                        
                                                                          
                                                                          
  Error Output:                                                           
  ================                                                        
  sh: exec: line 1: cat /var/www/config/crontab/* | crontab -: not found

请问有人有解决办法吗?

php symfony process symfony-process
1个回答
0
投票

文档说:

使用参数数组是定义命令的推荐方法。这可以帮助您避免任何转义,并允许无缝发送信号(例如,在进程运行时停止进程):

$process = new Process(['/path/command', '--option', 'argument', 'etc.']);
$process = new Process(['/path/to/php', '--define', 'memory_limit=1024M', '/path/to/script.php']);

如果您需要使用流重定向、条件执行或操作系统 shell 提供的任何其他功能,您还可以使用

fromShellCommandline()
静态工厂将命令定义为字符串。

因此,如果您以数组形式提供命令,则不要将整个命令放入单个数组参数中。而且,如果您尝试执行重定向之类的操作,则根本不使用数组

use Symfony\Component\Process\Exception\ProcessFailedException; use Symfony\Component\Process\Process; $process = Process::fromShellCommandLine('cat crons/* | crontab -'); try { $process->run(); } catch (ProcessFailedException $e) { ... }
    
© www.soinside.com 2019 - 2024. All rights reserved.