2014-11-01 38 views
0

下面是我拥有的一个简单示例。如果我有两个任务step1和step2,并且step1是一个依赖项,我如何读取步骤2中step1的返回值(从输出)?保存来自python-Luigi的返回值

class step1(luigi.Task): 

    shardNum = luigi.Parameter() 

    def run(self): 
     with open('workfile1', 'w') as f: 
      f.write("TEST") 

    def output(self): 
     return [luigi.LocalTarget("workfile1")] 
     #HOW DO I READ THE RETURN VALUE OF THIS IN STEP2? 

class step2(luigi.Task): 

    def requires(self): 
     #HOW CAN I GET THE TARGET; luigi.LocalTarget("workfile1"); AND USE IT ELSEHOW? 
     return step1() 

    def run(self): 
     with open('workfile2', 'w') as f: 
      f.write("TEST") 

    def output(self): 
     return luigi.LocalTarget("workfile2") 

编辑:这似乎是的hackish,但工作(有没有更好/更清洁的方式?)

class step2(luigi.Task): 

    ... 

    def run(self): 
     print(self.requires().output()[0])#prints the output from last function 
     with open('workfile2', 'w') as f: 
      f.write("TEST") 

    ... 

回答

0

这是简明的方式来做到这一点:

class step2(luigi.Task): 
    ... 
    def run(self): 
     with self.input()[0].open() as f: 
      f.write('TEST') 
    ... 

如果你没有将task1中的输出目标包装在一个数组中,那么它会更干净,那么你可以直接执行with self.input().open()...来获取数据。