0

これは私の側では一種のクルーゲフェストだと思いますが、初期化によって「自己」が返される前に、多くの重要なパラメーターを設定するルイージおよびシルイジモジュールを使用しています。また、self が返された後にこれらのパラメーターを手動で処理しようとすると、Luigi.Parameter オブジェクトがそれらをマスクして、必要なことを実行できなくなります。

luigi および sciluigi クラス (使用する場合) には no が含まれます__init____init__または呼び出しを挿入しようとするとsuper(ChildClass, self).__init__(*args, **kwargs)...奇妙なエラー「予期しないパラメーター」エラーが発生します。

Sciluigi クラスは次のようになります...

class MyTask(sciluigi.task):
    param1 = sciluigi.Parameter(default='Yes') #String only
    param2 = sciluigi.Parameter(default='No')  #String only

    def out_target(self):
        return sciluigi.TargetInfo(self, self.out)

    def run(self):
        with self.out_target().open('w') as foofile:
            foofile.write('foo\n')

SO ... setattr PRIOR を介していくつかのパラメーターを動的に設定して、実際に「自己」が返されることを望んでいます。ただし、setattr にはオブジェクトが必要です。

私は次のようなことができることを望んでいました...

setattr(inspect.stack()[?][?], 'DynamicVar', sciluigi.Parameter(default='Yes') )

編集:@Charles Duffy

うーん、どの情報が最も役立つかわかりません。

最初の問題は; init を追加できません。__init__メソッドを追加した実際のコードを以下に示します。実行しようとすると、結果のエラーが含まれています。スーパーコールを実行しようとすると、同じエラーが発生します__init__

class FileConverter(sciluigi.Task):
    """
    """
    in_target   = None # Mandatory
    out = sciluigi.Parameter() # <file>
    exepath = sciluigi.Parameter(default = "") 

    def __init__(self):
        self.var = 'anything'

    def out_target(self):
        log.debug("In 'FileConverter.out_target'... ")
        return sciluigi.TargetInfo(self, self.out)

    def run(self):
        result = None
        command = ''.join([
                           self.exepath, _slash, "FileConverter ",
                           " -in ", self.in_target().path,
                           " -out ", self.out_target().path, 
                           " -out_type ", self.file_type
                           ])
        log.info("RUNNING COMMAND: " + command)
        result = self.ex(command)
        log.info("result: " + result[1])

エラー

2017-02-24 17:01:48 |  WARNING | Will not run MyWorkflow(instance_name=sciluigi_workflow) or any dependencies due to error in deps() method:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/luigi/worker.py", line 697, in _add
    deps = task.deps()
  File "/Library/Python/2.7/site-packages/luigi/task.py", line 572, in deps
    return flatten(self._requires())
  File "/Library/Python/2.7/site-packages/luigi/task.py", line 544, in _requires
    return flatten(self.requires())  # base impl
  File "/Library/Python/2.7/site-packages/sciluigi/workflow.py", line 105, in requires
    workflow_output = self.workflow()
  File "/Users/mikes/Documents/Eclipseworkspace/Bioproximity/OpenMS-Python-Luigi/site-packages/Bioproximity/sciluigi_tasks/PipelineTest1.py", line 33, in workflow
    exepath = "/Applications/OpenMS-2.1.0/TOPP"
  File "/Library/Python/2.7/site-packages/sciluigi/workflow.py", line 145, in new_task
    newtask = sciluigi.new_task(instance_name, cls, self, **kwargs)
  File "/Library/Python/2.7/site-packages/sciluigi/task.py", line 37, in new_task
    newtask = cls.from_str_params(kwargs)
  File "/Library/Python/2.7/site-packages/luigi/task.py", line 412, in from_str_params
    return cls(**kwargs)
  File "/Library/Python/2.7/site-packages/luigi/task_register.py", line 99, in __call__
    h[k] = instantiate()
  File "/Library/Python/2.7/site-packages/luigi/task_register.py", line 80, in instantiate
    return super(Register, cls).__call__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'instance_name'

2番目の問題は次のとおりです。

自分自身が戻るのを待つと、(たとえば、上記のコードを使用して) 区別できなくなります...

in_target   = None # Mandatory
out = sciluigi.Parameter() # <file>

を実行するtype(out)と、 type はパラメーターが単なる文字列 (sciluigi.Parameter オブジェクトではない) であると報告するため、`ìsinstance(out, sciluigi.Parameter) を使用しようとすると...False が返されます。

要点は次のとおりです。

sciluigi.Parameter オブジェクトを動的に (プログラムで) 設定し、その後 sciluigi.Parameter() オブジェクト変数 ( などout) と「実際の」 str() オブジェクト ( などin_target)を区別できるようにする必要があります。

これが理にかなっていることを願っています。

4

2 に答える 2