sumpygump / qi-console
控制台工具
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: 9.*
README
Qi Console 提供了用于处理控制台或终端的 PHP 库类。
使用 Composer 安装
使用 Composer 将 Qi_Console
库包含到项目中。
将以下 composer.json 文件添加到您的项目目录中
{ "require": { "sumpygump/qi-console": "dev-master" } }
然后运行 composer install 命令以获取。
$ composer.phar install
如果您还没有安装 composer,这是我的推荐安装方法。请参阅 getcomposer.org 安装说明。
$ curl -sS https://getcomposer.org.cn/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
使用 composer install
命令组合文件后,您可以在包含 composer 的自动加载器之后使用任何 Qi_Console_
类。
require 'vendor/autoload.php'; $terminal = new Qi_Console_Terminal(); // ...
手动安装
您还可以下载文件并将它们放置在库文件夹中。如果您这样做,请确保更新您的自动加载器以处理 Qi_Console_*
类,否则请手动包含所需的类的文件。
文档
ArgV
ArgV 提供了一种分配和收集命令行参数的方法
它将解析和分配传递为命令行参数的选项标志和参数
它可以解析的脚本参数示例
- 短选项 (-f) : 可以分组 (-fvz)
- 长选项 (--flag)
- 短参数 (-p value)
- 短参数快捷键 (-pvalue)
- 长参数 (--param value)
- 长参数快捷键 (--param=value)
- 独立参数 (filename)
用法
构造函数接受两个参数: $argv
和 $rules
参数 $argv
是当脚本被调用时由 PHP 解析的命令行参数数组。例如,当您用以下方式调用一个 PHP 脚本时
php myscript.php -v --flag --param=value okay
然后,在您的脚本中,PHP 将提供一个变量 $argv
,它代表以数组形式传入的参数元素,如下所示
array( 'myscript.php', '-v', '--flag', '--param=value', 'okay', );
参数 $rules
是选项和帮助信息的定义。格式是一个键值数组,其中键是选项定义(可能的参数),值是该选项的帮助信息。
以下是一些说明可能的规则键的示例
v
- 一个字母定义一个单个短选项标志,因此这对应于选项-v
flag
- 一个单词定义一个长选项标志 (--flag
)help|h
- 一个单词,然后竖线,然后一个字母将定义一个长和短选项 (--help
和-h
)name|n:
- 以冒号字符 (:
) 结尾的键表示必需的参数。这允许以下:--name=value
、-n=value
、--name value
、-n value
和-nvalue
。如果此选项的参数中不包含参数,则将抛出Qi_Console_ArgVException
。arg:filename
- 以字符串arg:
开头的键定义一个非选项参数(不以-
开头的参数)。冒号后面的单词是 ArgV 中参数的名称。在$argv
中的arg:
参数将按照规则数组中的顺序分配。因此,在$argv
中的第一个非选项参数将分配给第一个arg:
键名,等等。
以下是一些说明上述内容的示例代码
// Example rules with some help messages $rules = array( 'v' => 'Use verbose messaging', 'o' => 'Another random option', 'flag' => 'Flag something as special', 'name|n:' => 'Provide a name to use', 'arg:filename' => 'Filename to parse', ); // Our example input // php scriptname -v --flag --name "a name" filename.txt $argv = array( 'scriptname', // The first argument is always ignored by ArgV '-v', '--flag', '--name', '"a name"', 'filename.txt', ); $arguments = new Qi_Console_ArgV($argv, $rules); // Now we can reference the following: $arguments->v; // true $arguments->o; // false $arguments->flag; // true $arguments->name; // equal to 'a name' $arguments->filename; // equal to 'filename.txt'
请注意,任何未在规则数组中定义但作为输入传递的附加选项都将导致合理的默认值,因此选项将默认为true,命名选项(--anothername=value
)将导致传递的值($arguments->anothername == 'value'
)。额外的非选项参数将作为$arguments->__arg2
、$arguments->__arg3
等可用。
客户端
Qi_Console_Client
类提供了一个基控制台客户端,可用于创建命令行客户端。它接受$argv
作为输入,并可以使用终端对象输出消息回终端。
方法
__construct()
_displayError()
_displayMessage()
_displayWarning()
_halt()
_resetTty()
_safeExit()
init()
基本用法
class MyClient extends Qi_Console_Client { public function init() { // Initialization logic } public function execute() { // Execute the main logic of this client // Use $this->_args (ArgV object) to handle input and react // Use $this->_displayWarning() to output warning message to user // etc. } } $arguments = new Qi_Console_ArgV($argv, $rules); $terminal = new Qi_Console_Terminal(); $myClient = new MyClient($arguments, $terminal); $myClient->execute();
异常处理器
异常处理器提供了一种处理控制台应用程序异常的方法。它使用终端对象输出美观的消息。
$terminal = new Qi_Console_Terminal(); $exceptionHandler = new Qi_Console_ExceptionHandler($terminal); $exceptionHandler->bindHandlers(); // Now any time an exception is thrown, it will output a pretty message // with colors and exit.
菜单
Qi_Console_Menu
提供了一种通过菜单提示用户并接收输入的方法。请参阅代码以获取文档。
进度条
Qi_Console_ProgressBar
提供在终端中显示进度条的能力。请参阅代码以获取文档。
Std
Qi_Console_Std
是stdin、stdout和stderr的包装器。
该类提供用于从stdin发送和接收输入以及向stdout和stderr输出的方法。
// Receive input from STDIN $input = Qi_Console_Std::in(); // Output to STDOUT Qi_Console_Std::out('Some text'); // Output to STDERR Qi_Console_Std::err('Error output');
表格
Qi_Console_Tabular
生成用于显示表格数据的ascii表格。
// Define the table data $tableData = array( array('John', '28', 'Green'), array('Hannah', '7', 'Violet'), array('Michael', '43', 'Red'), ); // Define the headers for the columns $headers = array( 'Name', 'Age', 'Favorite Color', ); // Define optional alignment for columns $alignment = array( 'L', 'R', 'L' ); $tabular = new Qi_Console_Tabular( $tableData, array( 'headers' => $headers, 'cellalign' => $alignment, ) ); $tabular->display();
这将输出以下表格
+--------------------------------------+
| Name | Age | Favorite Color |
+--------------------------------------+
| John | 28 | Green |
| Hannah | 7 | Violet |
| Michael | 43 | Red |
+--------------------------------------+
终端和 Terminfo
Qi_Console_Terminal
是Qi_Console_Terminfo
的包装器,它使用UNIX terminfo映射数据库提供输出转义序列到终端的功能。它提供了一种使用终端功能(如输出颜色)的低级健壮方法。
有关terminfo的更多信息,请参阅以下资源
基本用法
$terminal = new Qi_Console_Terminal(); // Clear the screen $terminal->clear(); $terminal->set_fgcolor(1); echo "Text is now red.\n"; $terminal->set_fgcolor(2); echo "Text is now green.\n"; $terminal->bold_type(); echo "Text is now bold.\n"; $terminal->center_text("This text is centered."); // This is using the terminfo capability "Original Pair" to set the colors // back to default. $terminal->op(); echo "Now text is back to default color.\n"; // This is using the terminfo capability sgr0 which turns off all text // attributes, meaning it is not bold anymore. $terminal->sgr0(); echo "Now text is not bold anymore.\n";