WP_CLI::runcommand │ public static │ WP-CLI 1.0 Run a WP-CLI command.
Launches a new child process to run a specified WP-CLI command. Optionally:
Run the command in an existing process.
Prevent halting script execution on error.
Capture and return STDOUT, or full details about command execution.
Parse JSON output if the command rendered it.
Include additional arguments that are passed to the command.
$options = array(
'return' => true, // Return 'STDOUT'; use 'all' for full object.
'parse' => 'json', // Parse captured STDOUT to JSON array.
'launch' => false, // Reuse the current process.
'exit_error' => true, // Halt script execution on error.
'command_args' => [ '--skip-themes' ], // Additional arguments to be passed to the $command.
);
$plugins = WP_CLI::runcommand( 'plugin list --format=json', $options );
Метод класса: WP_CLI{}
Хуков нет.
Возвращает
mixed.
Использование
$result = WP_CLI::runcommand( $command, $options );
$command(строка) (обязательный)
WP-CLI command to run, including arguments.
$options(массив)
Configuration options for command execution.
По умолчанию: []
launch (true|false)
Launches a new process (true) or reuses the existing process (false).
По умолчанию: true
exit_error (true|false)
Halts the script on error.
По умолчанию: true
return (true|false|строка)
Returns output as an object when set to 'all' (string), return just the 'stdout', 'stderr', or 'return_code' (string) of command, or print directly to stdout/stderr (false).
По умолчанию: false
parse (true|false|строка)
Parse returned output as 'json' (string); otherwise, output is unchanged (false).
По умолчанию: false
Код WP_CLI::runcommand() WP CLI::runcommand
WP-CLI 2.13.0-alpha
public static function runcommand( $command, $options = [] ) {
$defaults = [
'launch' => true, // Launch a new process, or reuse the existing.
'exit_error' => true, // Exit on error by default.
'return' => false, // Capture and return output, or render in realtime.
'parse' => false, // Parse returned output as a particular format.
'command_args' => [], // Include optional command arguments.
];
$options = array_merge( $defaults, $options );
$launch = $options['launch'];
$exit_error = $options['exit_error'];
$return = $options['return'];
$parse = $options['parse'];
$command_args = $options['command_args'];
if ( ! empty( $command_args ) ) {
$command .= ' ' . implode( ' ', $command_args );
}
$retval = null;
if ( $launch ) {
Utils\check_proc_available( 'launch option' );
$descriptors = [
0 => STDIN,
1 => STDOUT,
2 => STDERR,
];
if ( $return ) {
$descriptors = [
0 => STDIN,
1 => [ 'pipe', 'w' ],
2 => [ 'pipe', 'w' ],
];
}
$php_bin = escapeshellarg( Utils\get_php_binary() );
$script_path = $GLOBALS['argv'][0];
// Persist runtime arguments unless they've been specified otherwise.
$configurator = self::get_configurator();
$argv = array_slice( $GLOBALS['argv'], 1 );
list( $ignore1, $ignore2, $runtime_config ) = $configurator->parse_args( $argv );
foreach ( $runtime_config as $k => $v ) {
if ( preg_match( "|^--{$k}=?$|", $command ) ) {
unset( $runtime_config[ $k ] );
}
}
$runtime_config = Utils\assoc_args_to_str( $runtime_config );
$runcommand = "{$php_bin} {$script_path} {$runtime_config} {$command}";
$pipes = [];
$proc = Utils\proc_open_compat( $runcommand, $descriptors, $pipes, getcwd() );
$stdout = '';
$stderr = '';
if ( $return ) {
$stdout = stream_get_contents( $pipes[1] );
fclose( $pipes[1] );
$stderr = stream_get_contents( $pipes[2] );
fclose( $pipes[2] );
}
$return_code = proc_close( $proc );
if ( -1 === $return_code ) {
self::warning( 'Spawned process returned exit code -1, which could be caused by a custom compiled version of PHP that uses the --enable-sigchild option.' );
} elseif ( $return_code && $exit_error ) {
exit( $return_code );
}
if ( true === $return || 'stdout' === $return ) {
$retval = trim( $stdout );
} elseif ( 'stderr' === $return ) {
$retval = trim( $stderr );
} elseif ( 'return_code' === $return ) {
$retval = $return_code;
} elseif ( 'all' === $return ) {
$retval = (object) [
'stdout' => trim( $stdout ),
'stderr' => trim( $stderr ),
'return_code' => $return_code,
];
}
} else {
$configurator = self::get_configurator();
$argv = Utils\parse_str_to_argv( $command );
list( $args, $assoc_args, $runtime_config ) = $configurator->parse_args( $argv );
if ( $return ) {
$existing_logger = self::$logger;
self::$logger = new Execution();
self::$logger->ob_start();
}
if ( ! $exit_error ) {
self::$capture_exit = true;
}
try {
self::get_runner()->run_command(
$args,
$assoc_args,
[
'back_compat_conversions' => true,
]
);
$return_code = 0;
} catch ( ExitException $e ) {
$return_code = $e->getCode();
}
if ( $return ) {
$execution_logger = self::$logger;
$execution_logger->ob_end();
self::$logger = $existing_logger;
$stdout = $execution_logger->stdout;
$stderr = $execution_logger->stderr;
if ( true === $return || 'stdout' === $return ) {
$retval = trim( $stdout );
} elseif ( 'stderr' === $return ) {
$retval = trim( $stderr );
} elseif ( 'return_code' === $return ) {
$retval = $return_code;
} elseif ( 'all' === $return ) {
$retval = (object) [
'stdout' => trim( $stdout ),
'stderr' => trim( $stderr ),
'return_code' => $return_code,
];
}
}
if ( ! $exit_error ) {
self::$capture_exit = false;
}
}
if ( ( true === $return || 'stdout' === $return )
&& 'json' === $parse ) {
$retval = json_decode( $retval, true );
}
return $retval;
}