Process Helper(进程助手)

3.4 版本
维护中的版本

进程助手,显示正在运行的进程,并汇报关于进程状态的有用信息。

要显示进程(process)细节,使用 ProcessHelper 并使用verbosity选项来运行你的命令。例如,使用very verbose verbosity级别(即 `-vv`)来运行以下代码:

1
2
3
4
5
6
use Symfony\Component\Process\ProcessBuilder;
 
$helper = $this->getHelper('process');
$process = ProcessBuilder::create(array('figlet', 'Symfony'))->getProcess();
 
$helper->run($output, $process);

这将导致以下输出:

若使用debug verbosity(调试用冗长度,比如 -vvv)则会输出更多细节:

如果进程失败,调试起来很容易:

参数 

有三种方式可以使用进程助手:

  • 使用一个命令行字符串:
1
2
// ...
$helper->run($output, 'figlet Symfony');
  • 一个参数的数组:
1
2
// ...
$helper->run($output, array('figlet', 'Symfony'));

当对一个数组参数使用本助手时,要注意它们会被自动转义。

1
2
3
4
5
6
use Symfony\Component\Process\ProcessBuilder;
 
// ...
$process = ProcessBuilder::create(array('figlet', 'Symfony'))->getProcess();
 
$helper->run($output, $process);

自定义显示 

你可以显示自定义的错误信息,使用 run() 方法的第三个参数即可:

1
$helper->run($output, $process, 'The process failed :(');

可以把一个process callback当作第四个参数传入。参考 Process组件 以了解callback的相关文档:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Process\Process;
 
$helper->run($output, $process, 'The process failed :(', function ($type, $data) {
    if (Process::ERR === $type) {
        // ... do something with the stderr output / 处理 stderr 输出
    } else {
        // ... do something with the stdout / 处理 stdout 输出
    }
});

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)