我想用Python的Ruffus包创建一个管道,并且我正在为它的最简单的概念而奋斗。两个任务应该一个接一个地执行。第二个任务取决于第一个任务的输出。在Ruffus文档中,一切都是为从外部文件导入/导出而设计的。我想处理内部数据类型,如字典。
问题是,“跟踪”不接受输入,而@transform不使用dicts。我是不是遗漏了什么?
def task1():
# generate dict
properties = {'status': 'original'}
return properties
@follows(task1)
def task2(properties):
# update dict
properties['status'] = 'updated'
return properties最终,管道应该将一组函数组合在一个类中,以便在执行过程中更新类对象。
发布于 2016-08-09 11:38:20
只有当有输入/输出文件时,才应该使用Ruffus装饰器。例如,如果task1生成file1.txt (这是task2的输入,它生成file2.txt ),那么您可以按如下方式编写一个管道:
@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
def task1():
properties = {'status': 'original'}
return properties
def task2():
properties = task1()
properties['status'] = 'updated'
return propertieshttps://stackoverflow.com/questions/38833119
复制相似问题