我有兴趣开发自我记录的管道。
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 :(得分:2)
我是Ruffus的作者,刚刚检查了ruffus的变化,允许它与pweave合作进入google源代码库。我将在下一个版本中发布。
如果您不耐烦,可以使用以下命令行获取最新(固定)源:
hg clone https://bunbun68@code.google.com/p/ruffus/
利奥
详情如下:
Ruffus使用每个ruffus任务函数的完全限定名称(带有模块名称)来唯一标识代码,以便可以按名称引用管道任务。
Pweave代码非常简单。太好了! Pweave一次向python解释器发送代码块为exec
- chunk by chunk。当然,块不属于任何“模块”,任务函数的function.__module__
值为None
,而不是任何字符串。
一个明智的str()
转换None
到"None"
似乎解决了这个问题。
利奥
答案 1 :(得分:1)
为了记录,pweave可以与装饰器一起使用。
这与ruffus如何识别哪个函数(函数实际上必须属于模块文件)有关,因为使用了function.__module__
属性。我不确定你是否可以欺骗它包含创建这些函数标识符所需的所有信息。
如果您编辑pweave中包含的pweb.py
脚本,以便try:...except
函数中的pweave()
:语句更详细(最简单的只是注释掉),您可以自己查看错误try
和except
部分。你得到的错误是最深的皱纹。
我建议远离像ruffus这样的复杂库来达到教学目的,因为ruffus特别使用一些hacks(语法糖,如果你愿意)来提供一个简单的用户界面。如果您已经开始使用它来实现此目的,您可以尝试联系对我的功能请求非常敏感的作者。他可能对如何做到这一点有一些想法。