saxulum/saxulum-processes-executor

此包已 废弃 并不再维护。未建议替代包。

Saxulum 进程执行器

1.0.0 2018-06-17 10:06 UTC

This package is auto-updated.

Last update: 2021-10-02 20:02:22 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Total Downloads Monthly Downloads Latest Stable Version Latest Unstable Version

描述

一个简单的进程执行器。

要求

  • 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