saxulum / saxulum-processes-executor
此包已 废弃 并不再维护。未建议替代包。
Saxulum 进程执行器
1.0.0
2018-06-17 10:06 UTC
Requires
- php: ~7.0
- psr/log: ~1.0
- symfony/process: ~4.0|~3.0|~2.8
Requires (Dev)
- phpunit/phpunit: ^6.5.8
This package is auto-updated.
Last update: 2021-10-02 20:02:22 UTC
README
描述
一个简单的进程执行器。
要求
- php: ~7.0
- psr/log: ~1.0
- symfony/process: ~4.0|~3.0|~2.8
安装
通过 Composer 作为 saxulum/saxulum-processes-executor 安装。
使用方法
无回调的简单使用
<?php
use Symfony\Component\Process\Process;
use Saxulum\ProcessesExecutor\ProcessesExecutor;
$processes = [
new Process('php subprocess1.php'),
new Process('php subprocess2.php'),
new Process('php subprocess3.php'),
new Process('php subprocess4.php'),
new Process('php subprocess5.php'),
];
$startedCommandLines = [];
$executor = new ProcessesExecutor();
$executor->execute($processes);
带有启动回调(每个进程调用一次)
<?php
use Symfony\Component\Process\Process;
use Saxulum\ProcessesExecutor\ProcessesExecutor;
$processes = [
new Process('php subprocess1.php'),
new Process('php subprocess2.php'),
new Process('php subprocess3.php'),
new Process('php subprocess4.php'),
new Process('php subprocess5.php'),
];
$startedCommandLines = [];
$executor = new ProcessesExecutor();
$executor->execute(
$processes,
function (Process $process, $key) use (&$startedProcesses) {
$startedCommandLines[$key] = $process->getCommandLine();
}
);
带有迭代回调(每次迭代调用一次)
<?php
use Symfony\Component\Process\Process;
use Saxulum\ProcessesExecutor\ProcessesExecutor;
$processes = [
new Process('php subprocess1.php'),
new Process('php subprocess2.php'),
new Process('php subprocess3.php'),
new Process('php subprocess4.php'),
new Process('php subprocess5.php'),
];
$outputs = [];
$errorOutputs = [];
$executor = new ProcessesExecutor();
$executor->execute(
$processes,
null,
function (array $processes) use (&$outputs, &$errorOutputs) {
foreach ($processes as $key => $process) {
/** @var Process $process */
if ('' !== $output = $process->getIncrementalOutput()) {
if (!isset($outputs[$key])) {
$outputs[$key] = '';
}
$outputs[$key] .= $output;
}
if ('' !== $errorOutput = $process->getIncrementalErrorOutput()) {
if (!isset($outputs[$key])) {
$errorOutputs[$key] = '';
}
$errorOutputs[$key] .= $errorOutput;
}
}
}
);
带有完成回调(每个进程调用一次)
<?php
use Symfony\Component\Process\Process;
use Saxulum\ProcessesExecutor\ProcessesExecutor;
$processes = [
new Process('php subprocess1.php'),
new Process('php subprocess2.php'),
new Process('php subprocess3.php'),
new Process('php subprocess4.php'),
new Process('php subprocess5.php'),
];
$outputs = [];
$errorOutputs = [];
$executor = new ProcessesExecutor();
$executor->execute(
$processes,
null,
null,
function (Process $process, $key) use (&$outputs, &$errorOutputs) {
if ('' !== $output = $process->getOutput()) {
$outputs[$key] = $output;
}
if ('' !== $errorOutput = $process->getErrorOutput()) {
$errorOutputs[$key] = $errorOutput;
}
}
);
版权
Dominik Zogg 2016