2

自己文書化パイプラインの開発に興味があります。

RuffusタスクをPweaveチャンクでラップできますか?

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'",)

おそらく回避策がありますか?

4

2 に答える 2

2

私は Ruffus の作成者であり、pweave と連携できるように ruffus への変更を Google ソース コード リポジトリにチェックインしました。私は次のリリースになります。

せっかちな場合は、次のコマンド ラインを使用して最新の (修正された) ソースを取得できます。

hg clone https://bunbun68@code.google.com/p/ruffus/ 

レオ

詳細は次のとおりです。

Ruffus は、パイプライン タスクを名前で参照できるように、各 ruffus タスク関数の完全修飾名 (モジュール名を含む) を使用してコードを一意に識別します。

Pweave コードは非常に単純でした。良い!Pweave は、一度にコードのチャンクを Python インタープリターに送信して、チャンクごとに処理しますexec。もちろん、チャンクはどの「モジュール」にも属さず、タスク関数は文字列ではなくfunction.__module__値を持ちます。None

単一の賢明なstr()変換Noneにより"None"、問題が解決したようです。

レオ

于 2012-01-14T17:53:53.600 に答える
1

記録として、 pweave はデコレータで問題なく動作します。

これは、 ruffus がどの関数がどれであるかを識別する方法に関係していますfunction.__module__。プロパティが使用されるため、関数は実際にはモジュールファイルに属している必要があります。これらの関数識別子を作成するために必要なすべての情報を含めるようにだますことができるかどうかはわかりません。

関数内の : ステートメントがより冗長にpweb.pyなるように pweave に含まれるスクリプトを編集すると、自分でエラーを確認できます(最も簡単なのは、 andの部分をコメントアウトすることです)。あなたが得るエラーは、ラフスの最も深い部分にあります。try:...exceptpweave()tryexcept

特に ruffus は単純なユーザー インターフェイスを提供するために多くのハック (必要に応じてシンタックス シュガー) を使用するため、教訓的な目的で ruffus のような複雑なライブラリを使用しないことをお勧めします。もしあなたがこの目的のためにそれを使うことに固執しているなら、私の機能要求に非常に反応した作者に連絡してみることができます. 彼はこれを行う方法についていくつかのアイデアを持っているかもしれません。

于 2012-01-09T20:38:32.443 に答える