用于相互传递子流程的轻量级工具

vorlauf的Python项目详细描述


沃罗夫

什么?

vorlauf是一个非常简单的工具,它可以帮助您创建流程管道(在 壳感)。它还有助于将流程的定义与 使用给定的stdin、stdout和stderr运行该进程。

为什么?

因为用于将流程链接在一起的子流程api很麻烦,而且 没有很好的记录。

怎么做?

这个库基本上什么也不做-它只实现了不到100行。 有两个可用的类,ProcessPipeline

过程

Process类传递args、cwd和env,并通过调用 Process.run带有可选的stdinstdoutstderr参数。

通过从 Process类,我们可以创建可重用的Process定义:

critical_grepper = Process('grep', 'CRITICAL')

syslog = open('/var/log/syslog', 'r')
apachelog = open('/var/log/httpd/error.log', 'r')

filtered = open('critical.log', 'w')

for logfile in (syslog, apachelog):
  critical_grepper.run(stdin=logfile, stdout=filtered)

管道

Pipeline类存储一个Process类的列表,当运行时 使用Pipeline.run和可选的stdinstdout,管道 一起处理。如果存在,stdin将传递给第一个进程,并且 如果存在,stdout将传递给最后一个进程。

示例

from vorlauf import Pipeline, Process

pipeline = Pipeline()
pipeline.add(Process('cat', 'foo.txt'))
pipeline.add(Process('grep', 'something'))
pipeline.add(Process('uniq'))

with open('new.txt', 'wb') as fd:
    pipeline.run(stdout=fd)

并且由于Process和^{tt2}中内置的运算符重载$ 类,这可以简化为:

from vorlauf import Process as P

pipeline = P('cat', 'foo.txt') | P('grep', 'something') | P('uniq')
with open('new.txt', 'wb') as fd:
    pipeline.run(stdout=fd)

最后,可以使用Process类创建可重用组件:

from vorlauf import Process

class GPG(Process):

    def __init__(self, passphrase):
        super(GPG, self).__init__('gpg', '-c', '--passphrase', passphrase, '-')


class MySQLDump(Process):

    def __init__(self, password, dbname, **kwargs):
        super(MySQLDump, self).__init__(
            'mysqldump', '-u', 'root', '-p{}'.format(password), dbname
        )


with open('mysql.dump', 'wb') as fd:
    pipeline = MySQLDump('loldongs', 'foo') | GPG('supersekrit')
    pipeline.run(stdout=fd)

测试

运行:

virtualenv venv
venv/bin/pip install -e .
venv/bin/python test.py

更改日志

1.0.0(2015-09-22)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JAVAexists()方法始终返回false   java SNMP4J v2c陷阱发送速度非常慢   java计算给定单词中字母的频率   在java中执行curl命令获取异常   java按下按钮时,应显示一个数字,并在日期选择器处计数   java递归将括号设置为字符串字符   节点。java中AWS IOT按钮的js Lambda函数   删除ArrayList中的所有空格。JAVA   java我可以在eclipse中定义一个显示html文件的视图吗?   java为什么RestController公开Crudepository中的所有操作?   春季3.2。使用java8的x   java迭代器如何使用构造函数   java Jersey客户端关闭InputStream响应它真的有效吗?   Java从剪贴板检索XML(Excel)电子表格   java线程被卡住,因为在运行中有一个永无止境的函数   基于Java编程的Amazon云开发