我对开发自文档化管道很感兴趣。
我可以在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'",)也许有变通的办法?
发布于 2012-01-15 01:53:54
我是Ruffus的作者,刚刚签入了ruffus的更改,以允许它与pweave合作进入google源代码存储库。我将在下一个版本中使用。
如果您没有耐心,可以使用以下命令行获取最新的(修复的)源代码:
hg clone https://bunbun68@code.google.com/p/ruffus/ 狮子座
详情如下:
Ruffus使用每个ruffus任务函数的全限定名(带有模块名称)来唯一标识代码,以便可以通过名称引用管道任务。
Pweave代码非常简单。好的!Pweave一次将代码块发送到python解释器,使其成为逐个块的exec-ed。当然,块不属于任何“模块”,任务函数的function.__module__值为None,而不是任何string。
将None转换为"None"的一个明智的str()似乎已经解决了这个问题。
狮子座
发布于 2012-01-10 04:38:32
需要说明的是,pweave与装饰器配合得很好。
这与ruffus如何识别哪个函数有关--函数实际上必须属于一个模块文件,因为使用了function.__module__属性。我不确定您是否能诱使它包含创建这些函数标识符所需的所有信息。
如果编辑pweave附带的pweb.py脚本,使pweave()函数中的try:...except:语句更冗长(最简单的方法是注释掉try和except部分),您可以自己看到错误。你得到的错误是在ruffus的最深处。
出于教学目的,我建议远离像ruffus这样的复杂库,因为ruffus特别使用了许多技巧(如果您愿意,可以使用语法糖)来提供简单的用户界面。如果你决意要使用它来达到这个目的,你可以尝试联系对我的特性请求做出了很大响应的作者。他可能对如何做到这一点有一些想法。
https://stackoverflow.com/questions/8792278
复制相似问题