让原木流动
aina的Python项目详细描述
艾娜
aina是一个通用的流处理框架。它包括 一个简单但强大的模板系统,它可以执行versitle命令 线路实用程序。
注意:这是新代码。师父在不断变化,缺少文件, 但在某种程度上,它可能对某人有用。如果 这对你很有用,帮助我们达到1.0.0。你可以从阅读开始 投稿指南,网址:https://github.com/ilovetux/aina/contribution.rst" rel="nofollow">https://github.com/ilovetux/aina/contribution.rst
- 自由软件:GNU通用公共许可v3
- 文档:https://aina.readthedocs.io rel="nofollow">https://aina.readthedocs.io
功能
- 简单、强大的模板系统
- 命令行实用程序
- python的所有功能
- 没有黑客或魔法
- 可接近的源代码
- 测试
- 待办事项:Web用户界面
- TOdo:涵盖了许多默认用例
- 待办事项:–无覆盖选项
安装
您可以使用以下命令安装最新的稳定版本:
$ pip install aina
或者,要克隆最新的开发版本:
$ git clone https://github.com/ilovetux/aina $ cd aina # Optional $ python setup.py test $ pip install .
概念
内置的模板引擎非常简单,它包括 命名空间和模板的。模板在 命名空间的上下文。
渲染包括两个阶段:
< Buff行情>- 扫描模板以查找与模式匹配的字符串 {%<;source>;%} 其中, <;source>; 是执行的python源代码( exec ) 在命名空间的上下文中。在执行期间,stdout是 捕获。执行后, {%<;source>;%} 将替换为字符串 包含输出。
- 扫描剩余输出以查找与模式匹配的字符串 {{<;expression>;} 其中 <;expression>; 是一个python表达式,它 替换为其计算的值( eval )
例如,让我们看一下下面的模板:
{% me = "iLoveTux" name = "Bill" age = 35 %} hello {{name}}: I heard that you just turned {{str(age)}}. Congratulations! Sincerely: {% print(me) %}
如果已呈现,则输出如下:
Hello Bill, I heard that you just turned 35. Congratulations! Sincerely: iLoveTux
这个概念应用于各种用例,具体表现为 包含许多常见用例的命令行实用程序。
用法
aina可以直接从python中使用,就像这样:
from aina import render namespace = {"foo": "bar"} template = "The value of foo is {{foo}}" result = render(template, namespace)
这种用法有一流的支持,但更简单的解决方案是使用 提供的cli。
命令行实用程序aina可以在两种模式下运行:
< Buff行情>- 流模式:数据流式传输并用于填充模板
- 文档模式:呈现文件src并将结果写入dst
流模式
流模式按以下方式运行:
< Buff行情>- 接受 文件名列表 (接受通配符),默认为stdin
- 此时,任何传递到 –begins的表达式都将执行 。
- 指定的文件按顺序处理
- 传递到 –begin files 的任何表达式都将执行 <李>当前文件中的数据是逐行读取的
- 通过 测试的任何语句都将被评估
- 如果所有测试都通过,则执行以下过程。
- 任何传递到 –开始行的表达式都将执行 。
- 任何模板都是通过python日志系统呈现的
- 任何传递到 的表达式都将执行结束行 。
- 传递到 的任何表达式都将执行结束文件 。
- 传递到 –ends 的任何表达式都将执行
下面是几个例子。有关详细信息,请参阅文档:
# Like grep $ aina stream --test "'error' in line.lower()" --template "{{line}}" *.log # Like wc -l $ aina stream --end-files "print(fnr, filename)" *.log # Like wc -wl $ aina stream --begins "words=0" --begin-lines "words += nf" --end-files "print(words, fnr, filename)" # Find all numbers "\d+" for each line $ aina stream --begins "import re" --begin-lines "print(re.findall(r'\d+', line))" *.log # Run an XPath $ aina stream --begins "from lxml import etree" --begin-lines "tree = etree.fromstring(line)" --templates "{{"\n".join(tree.xpath("./*"))}}"
请参阅文档了解更多信息并尝试:
$ aina stream --help
重要提示:
如果传递给任何钩子的任何内容被 os.path.exists确定为存在 然后,它将被读取并执行,就像该文本是在cli上传入的一样。这个 有助于快速解决字符转义问题。
文档模式
文档模式将一个或多个文件和/或目录呈现到 另一个位置。它的用法如下:
$ aina doc <src> <dst>
有控制行为的选项,但要点是:
< Buff行情>- 如果src是文件
- 如果dst是文件名,则src将呈现并写入dst
- 如果dst是一个目录,src将被呈现并写入dst中与src具有相同基名的文件中
- 如果src是一个目录
- dst必须是一个目录,src中的每个文件都呈现为dst中与src中的文件同名的文件
- 如果指定了 –recursive ,则子目录将在dst中复制
一些重要注意事项:
- 如果 –interval 被传递了一个整数值,程序将休眠那么多秒并检查模板的更改(基于文件的mtime),在这种情况下,它们将被重新呈现
用例
流模式非常适合处理 tail–follow=name的传入日志文件 或用于文本文件的特殊分析。
文档模式对于强大的配置模板非常有用 系统。 –interval 选项非常有用,因为它只会重新呈现 在文件更改时,这对于开发模板非常有用,因为您可以查看 结果几乎是实时的。
文档模式对于静态 网络资源,如图表、表格、仪表板等。
如果您发现更多的用例,请打开一个问题或请求添加它 在这里和wiki中
学分
作者:伊洛维托 这个包是用cookiecutter和项目模板创建的。