2012-01-09 45 views
2

我有兴趣开发自记文件管道。Pweave可以和Ruffus一起玩吗?

我可以在Pweave块中包装Ruffus任务吗?

Pweave and Ruffus 
============================================================== 

**Let's see if Pweave and ruffus can play nice** 


<<load_imports>>= 
import time 
from ruffus import * 
@ 

**Do this** 
<<task1>>= 
task1_param = [ 
        [ None, 'job1.stage1'], # 1st job 
        [ None, 'job2.stage1'], # 2nd job 
       ] 
@files(task1_param) 
def first_task(no_input_file, output_file): 
    open(output_file, "w") 
@ 

给我的感觉的Ruffus装饰都扔Pweave关:

$ Pweave ruffus.Pnw 
Processing chunk 1 named load_imports 
Processing chunk 2 named task1 
<type 'exceptions.TypeError'> 
("unsupported operand type(s) for +: 'NoneType' and 'str'",) 

或许有一种解决方法?

+0

嗨杰里米,作为Pweave的作者我很高兴看到,利奥能够解决这个问题。我希望你不要介意我为你的问题添加了pweave标签。 – 2012-02-23 06:38:01

回答

2

我是Ruffus的作者,刚刚检查了ruffus的变化,以允许它与pweave合作进入谷歌源代码库。我将在下一个版本中发布。

你可以得到最新的(固定)源使用下面的命令行,如果你不耐烦:

hg clone https://[email protected]/p/ruffus/ 

利奥

,具体情况如下:

Ruffus采用全合格每个ruffus任务函数的名称(带模块名称)唯一标识代码,以便管道任务可以按名称引用。

Pweave代码非常简单。太好了! Pweave每次向python解释器发送大块代码,以块为单位完成块。当然,块不属于任何“模块”,并且任务函数的值为None而不是任何字符串。

一个明智的str()转换None"None"似乎已经解决了这个问题。

狮子座

1

为了记录,pweave可以很好地与装饰器一起工作。

这与当使用function.__module__属性时ruffus如何识别哪个函数是哪个函数实际上必须属于模块文件有关。我不确定你是否可以欺骗它来包含创建这些函数标识符所需的所有信息。

您可以看到自己的错误,如果您编辑包含pweave使得try:...exceptpweb.py脚本:语句在pweave()功能更详细的(最简单的只是注释掉tryexcept部分)。你得到的错误是在最粗糙的部分。

为了提供一个简单的用户界面,我建议您不要使用复杂的库,如ruffus,因为ruffus特别使用了一些hacks(语法糖,如果您愿意的话)。如果您为此目的而使用它,您可以尝试联系对我的功能要求非常敏感的作者。他可能会对如何做到这一点有一些想法。

相关问题