2017-01-26 41 views
2

Luigiにパラメータを渡すにはどうすればよいですか?私はクラスの名前getFIlesとFileFinder.pyと呼ばれるPythonのファイルがある場合:Pythonでのパラメータの使用方法Luigi

class getFiles(luigi.Task):

をし、私のようなこのクラスにディレクトリに渡したい:

C://Documents//fileName

、その後、私のrunメソッドでこのパラメータを使用

def run(self):

これをコマンドラインで実行し、コードに使用するパラメータを追加するにはどうすればよいですか?私はこのようなコマンドラインでこのファイルを実行していることに慣れています:

python FileFinder.py getFiles --local-scheduler

私は、パラメータを使用するために自分のコードに追加するか、そしてどのように私は、コマンドライン引数にそのパラメータを追加するのですか?

また、この質問の延長として、私は複数の引数をどのように使用しますか?または文字列やリストなどの異なるデータ型の引数?

答えて

1

は、だから私は、これは私が追加されたコードでは、うまくいくと思う:

fileName = luigi.Parameter() 

私は、コマンドラインでこれを実行する場合:

python FileFinder.py getFiles --local-scheduler --getFiles-fileName C://Documents//fileName 

が、誰もが、異なる種類のパラメータのいずれかのアドバイスを持っている場合それらを使用する方法、特に数字とリストは私に教えてください。

3

すでに考え出したとして、あなたは、コマンドラインで

--param-name param-value 

経由ルイージに引数を渡すことができます。コード内では、Parameterクラスまたはそのサブクラスの1つをインスタンス化することによって、これらの変数を宣言する必要があります。変数が文字列ではないデータ型を持っているかどうかを、サブクラスはluigiに伝えるために使われます。ここでは、2つのコマンドライン引数、1 Intと1 Listを使用する例である:あなたがそれらの上にリスト操作を行いたい場合、あなたは変換する必要がありますので、ListParamsが実際に、ルイジによってタプルに変換し得ることを

import luigi 

class testClass(luigi.Task): 
    int_var = luigi.IntParameter() 
    list_var = luigi.ListParameter() 

    def run(self): 
     print('Integer Param + 1 = %i' % (self.int_var + 1)) 

     list_var = list(self.list_var) 
     list_var.append('new_elem') 
     print('List Param with added element: ' + str(list_var)) 

注意それらは最初に戻る(これはknown issueですが、すぐに修正されるようには見えません)。

luigi --module testmodule testClass --int-var 3 --list-var '[1,2,3]' --local-scheduler 

注:

あなたは、この(私は「testmodule.py」と呼ばれるファイルとして、コードを保存し、同じディレクトリ内から呼び出しを行っている)のようなコマンドラインから上記のモジュールを呼び出すことができますここでは、_を含む変数の場合は、-に置き換える必要があります。 コールには多くのステータスメッセージが表示されます。

Integer Param + 1 = 4 
List Param with added element: [1, 2, 3, 'new_elem'] 
+0

コードからモジュールを作成する方法を説明できますか?私は単一の文字列パラメータとリストパラメータの両方を使用できるようにするために、my_moduleが何であるか、他の非リストパラメータと一緒にコードを実行する方法を理解していません –

+0

モジュールのものはあなたの答え質問、私はそれを私の答えから削除しました。更新された回答は、必要なものをカバーする必要があります。 – Toterich

+0

コマンドライン引数なしでこれを実行する方法はありますか?私はpythonコードの中からluigiを呼び出して、リストオブジェクトを渡したいと思います。 'testClass(1、[1,2])。run()'のようなことができますが、それが最善かどうかはわかりません。 – citynorman

関連する問題