php-pmd / console
PHP 命令行控制台(clio/clio)
Requires
- php: >=5.6
- ext-pcntl: *
- ext-posix: *
- ext-sockets: *
README
基于 Clio 的控制台。
控制台是一个轻量级工具和辅助类,用于 CLI 应用程序。
它提供彩色输出、提示、确认输入、选择、背景。
安装
composer require php-pmd/console
需要 PHP 5.4。此库在 POSIX 系统上开发,并打算在已加载 posix、pcntl 和 sockets 扩展的 POSIX 系统上使用。
Console 类提供交互式命令行输入/输出辅助工具。
Console::stdin($raw = false)
等待用户输入。如果 $raw 设置为 true,则返回不带右修剪的 PHP_EOL 的输入。
Console::input($prompt = null, $raw = false)
询问用户输入,当用户输入 PHP_EOL 字符时结束。您可以提供提示字符串。如果 $raw 设置为 true,则返回不带右修剪的 PHP_EOL 的输入。
Console::stdout($text, $raw = false)
将 $text 打印到 STDOUT。文本可以包含文本颜色和样式指定符。此方法通过使用 shell 重定向检测文本是否要发送到 TTY 或通过文件发送,并根据情况相应地处理,在后者的情况下,通过删除所有颜色和样式指定符来处理文本。
如果第二个参数设置为 true,则将按原样打印 $text,保留所有文本颜色和样式指定符,无论是否打印到 TTY 或文件。
<?php use PhpPmd\Console; Console::stdout('Hello, World!');
Console::output($text, $raw = false)
与 Console::stdout 相同,但它自动附加一个 PHP_EOL。
Console::stderr($text, $raw = false)
行为类似于 Console::stdout,但用于 STDERR。
Console::error($text, $raw = false)
与 Console::stderr 相同,但自动附加一个 PHP_EOL。
Console::prompt($text, $options)
此函数提示用户输入。有几个选项可用
required: 如果输入是必需的则为 true,否则为 false。default: 如果用户没有提供输入,则此为默认值。pattern: 用于匹配的正则表达式模式。validator: 验证输入的可调用函数。必须返回true或false。error: 默认错误消息。
如果发生输入错误,则提示会重复,并会持续询问用户输入,直到满足 $options 数组中的所有要求。请注意,如果您提供默认选项,则不会强制执行 required。
<?php use PhpPmd\Console; $db_host = Console::prompt('database host', ['default' => 'localhost']);
如果您提供自己的验证可调用函数,可以向第二个参数传递自定义错误消息。
<?php use PhpPmd\Console; $file = Console::prompt('File', [ 'required' => true, 'validator' => function($input, &$error = null) { if (is_readable($input)) { return true; } else { $error = 'Path given is not a readable file'; return false; } } ]);
请注意,为此功能正常工作,第二个参数必须声明为引用。
Console::confirm($text)
询问用户简单的 y/n 回答。答案可以是 'y'、'n'、'Y' 或 'N'。返回 true 或 false。
<?php use PhpPmd\Console; $sure = Console::confirm('are you sure?');
Console::select($text, $options)
询问用户从选项中选择。$options 数组是输入和说明的键值对。自动附加输入选项 '?',它作为帮助选项显示所有其他选项及其相应的说明。
<?php use PhpPmd\Console; $opt = Console::select('apply this patch?', ['y' => 'yes', 'n' => 'no', 'a' => 'all'] );
Console::work(callable $callable)
通过创建另一个进程来在后台运行$callable,同时将状态更新显示到标准输出。默认情况下,状态更新是一个简单的旋转器,一旦$callable返回,旋转器将停止。通过向$callable提供一个$socket参数,状态更新将由后台进程发送到前台进程,使用socket_write()函数实现。
<?php use PhpPmd\Console; Console::stdout('Working ... '); Console::work(function($socket) { // $socket is optional, defaults to a spinner $n = 100; for ($i = 1; $i <= $n; $i++) { // do whatever it is you need to do socket_write($socket, "[$i/$n]\n"); sleep(1); // sleep is good for you } }); Console::stdout("%g[DONE]%n\n");
发送到前台进程的消息需要以一个"\n"字符结束。
文本颜色和样式指定符
您可以使用格式为%x的文本颜色和样式指定符,其中x是指定符。
<?php use PhpPmd\Console; Console::output('this is %rcolored%n and %Bstyled%n');
使用%n指定符可以将文本的颜色和样式规范化为shell的默认值。这个指定符来自PEAR的Console_Color包。要打印百分号,只需放置两个%字符即可。以下是完整的指定符集:
text text background
------------------------------------------------
%k %K %0 black dark grey black
%r %R %1 red bold red red
%g %G %2 green bold green green
%y %Y %3 yellow bold yellow yellow
%b %B %4 blue bold blue blue
%m %M %5 magenta bold magenta magenta
%p %P magenta (think: purple)
%c %C %6 cyan bold cyan cyan
%w %W %7 white bold white white
%F Blinking, Flashing
%U Underline
%8 Reverse
%_,%9 Bold
%n Resets the color
%% A single %
您可以将这些指定符与接受字符串并输出的方法一起使用。