首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带内部输入的Ruffus管道

带内部输入的Ruffus管道
EN

Stack Overflow用户
提问于 2016-08-08 15:26:56
回答 1查看 154关注 0票数 1

我想用Python的Ruffus包创建一个管道,并且我正在为它的最简单的概念而奋斗。两个任务应该一个接一个地执行。第二个任务取决于第一个任务的输出。在Ruffus文档中,一切都是为从外部文件导入/导出而设计的。我想处理内部数据类型,如字典。

问题是,“跟踪”不接受输入,而@transform不使用dicts。我是不是遗漏了什么?

代码语言:javascript
复制
def task1():
    # generate dict
    properties = {'status': 'original'}
    return properties

@follows(task1)
def task2(properties):
    # update dict
    properties['status'] = 'updated'
    return properties

最终,管道应该将一组函数组合在一个类中,以便在执行过程中更新类对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-09 11:38:20

只有当有输入/输出文件时,才应该使用Ruffus装饰器。例如,如果task1生成file1.txt (这是task2的输入,它生成file2.txt ),那么您可以按如下方式编写一个管道:

代码语言:javascript
复制
@originate('file1.txt')
def task1(output):
    with open(output,'w') as out_file:
        # write stuff to out_file

@follows(task1)
@transform(task1, suffix('1.txt'),'2.txt')
def task2(input_,output):
    with open(input_) as in_file, open(output,'w') as out_file:
        # read stuff from in_file and write stuff to out_file

如果您只想将字典作为输入,则不需要Ruffus,只需对代码进行适当的排序(因为它将按顺序运行),或者在task2中调用task2

代码语言:javascript
复制
def task1():
    properties = {'status': 'original'}
    return properties

def task2():
    properties = task1()
    properties['status'] = 'updated'
    return properties
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38833119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档