hambrook/clitaskrunner

在后台运行CLI命令,并通过回调获取包括缓冲区和行更新的事件。您可以订阅任何可写流,并获取在收到新行或每次缓冲区更新时触发的回调。

dev-master 2015-10-19 22:58 UTC

This package is not auto-updated.

Last update: 2024-09-18 17:50:30 UTC


README

#CLITaskRunner

Build Status

在后台运行CLI命令,并通过回调获取包括缓冲区和行更新的事件。您可以订阅任何可写流,并获取在收到新行或每次缓冲区更新时触发的回调。

##示例

$cmd = "mysqldump -uroot -proot -v dbname | mysql -uroot -proot dbname2";
$CLITR = new \Hambrook\CLITaskRunner\CLITaskRunner($cmd);
$CLITR->onLine(
	"stdErr",
	function($v) {
		echo "\nCopying table structure: ".$v
	},
	"/\-\- Retrieving table.*? ([^ ]+)\.\.\./"
);
$CLITR->onLine(
	"stdErr",
	function() {
		echo "\nCopying table rows..."
	},
	"/\-\- Retrieving rows/"
);
$CLITR->process();

##适合谁?可能主要是CLI应用程序开发者,但可能会有我没有想到的使用场景。

####为什么使用这个?我创建这个工具是因为我需要在CLI应用程序中使用mysqldumprsync,并想自定义这些命令的输出。这不能用简单的popen完成,因为mysqldump将它的详细输出放入stdErr流而不是stdOut。然后,我自然而然地使其尽可能灵活。

####何时使用这个?当您需要运行CLI命令并在特定流上发生特定输出时收到通知。

####这不是什么?这个库位于您的软件和它运行的CLI命令之间。它不在您的软件和用户之间。它不执行任何用户输入管理、参数管理、输出格式化或其他类似操作。它帮助您的软件从长时间运行的CLI命令中获取更新。

##函数 ###__construct() CLITaskRunner __construct(string $command)

创建一个带有准备运行的命令的新实例

###onLine() bool onLine(string $stream, callable $callback, [bool|string $pattern=false])

添加当收到新行时的回调,可选正则表达式模式。

###onBuffer() bool onBuffer(string $stream, callable $callback, [bool|string $pattern=false])

添加当收到缓冲区时的回调,可选正则表达式模式。

###onSuccess() bool onSuccess(callable $callback)

添加当命令成功时的回调。

###onFailure() bool onFailure(callable $callback)

添加当命令失败时的回调。

###onComplete() bool onComplete(callable $callback)

添加当进程完成时的回调。在onSuccess和onFailure之后调用。

###bufferSize() bool|int bufferSize([int $bufferSize=10])

获取或设置缓冲区大小。当前缓冲区大小对所有流是通用的。

###streams() bool streams([array $streams=[]])

获取或设置流数组。每个流将在添加回调时使用其数组键作为流键。

##测试 测试即将推出。

##反馈 如果您喜欢它,请告诉我。如果您讨厌它,请告诉我。如果您使用过并认为“一般”,我也很乐意听到您的反馈。

##贡献 请随意fork此项目并提交pull请求,或者甚至通过问题跟踪器请求功能。请确保pull请求描述详细,并符合现有的代码风格。

##路线图

  • 添加对写入标准输入流的支持
  • 为所有函数添加类型提示
  • 添加文档
  • 添加更多示例
  • 添加更多单元测试
  • 添加任何其他应包括的标准文档
  • 如果您有任何想法,请告诉我

##许可证 版权 © 2015 Rick Hambrook

本程序是自由软件:您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,无论是许可证的第3版,还是(根据您的选择)任何更新版本。

本程序的发布是希望它会有所用途,但没有任何保证;甚至没有关于适销性或特定用途的隐含保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已经随本程序收到了GNU通用公共许可证的一份副本。如果没有,请参阅https://gnu.ac.cn/licenses/